首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

J2EE 表現層設計關鍵決策與最佳實踐

     編輯:Java 相關知識

核心設計議題

表現層設計需權衡安全、數據完整性、可管理性、擴展性。本文梳理 Session 管理、訪問控制、驗證策略、Helper 完整性等關鍵決策點,並列舉常見反模式及重構方向。

Session 管理策略

客戶端 Session 狀態

將狀態序列化嵌入 HTML(隱藏字段)或 Cookie。優點:實現簡單、無跨服務器複製問題。缺點:

  • 大量狀態嚴重影響網絡性能(每請求雙向傳輸)。
  • 僅支持字符串,對象需「字符串化」。
  • 明文暴露敏感數據,需加密增加複雜度。
  • Cookie 受大小限制(4KB)。

結論:僅適用於極少量非敏感狀態;企業級應用不推薦。

服務端 Session 狀態

Session ID 對應服務端內存/數據庫存儲,超時或手動失效前持久。優勢:無大小類型限制、天然安全、避免網絡開銷、支持靈活擴展。

集群環境下需解決 Session 複製:

  • Server Affinity:負載均衡器將同一用戶請求路由至固定服務器。
  • 應用服務器內建複製:如 WebLogic、JBoss 等提供分布式 Session 支持。
  • 業務層/資源層外掛:EJB Stateful Session Bean 或關係數據庫共享狀態。

訪問控制

視圖級保護

  • All-or-Nothing:整頁面禁止未授權訪問。集中化控制器攔截優於分散在 JSP 中的 Guard Tag。
  • 部分內容保護:根據角色/狀態顯示片段(如 <corePatterns:guard role="manager">)。

配置驅動的資源保護

利用 web.xml <security-constraint> 定義受保護 URL 模式與角色。若角色不分配給任何用戶,則實現「僅內部轉發可訪問,瀏覽器直接訪問 403」。

最簡方法:將敏感 JSP 放入 /WEB-INF/ 目錄,容器禁止直接訪問,但 RequestDispatcher 可內部轉發。

重複表單提交防禦:同步器令牌模式

  1. 生成唯一 Token 存入 Session 並隱藏於表單。
  2. 提交時比對 Token:匹配則處理並更新 Token;不匹配拒絕並報錯。
  3. 同樣可防止收藏夾直接訪問中間流程頁面。

驗證策略

  • 客戶端驗證:JS 快速檢查(必填、格式),用戶體驗好但可繞過,不可單獨依賴。
  • 服務端驗證:必須且核心。分為:
    • Form-Centric:每個表單寫死驗證邏輯,重複代碼多,難維護。
    • 基於抽象類型:元數據(屬性文件/XML)描述約束(必填、數字範圍、格式),通用驗證組件解析執行,實現邏輯與規則分離,復用性強。

Helper 完整性與一致性陷阱

<jsp:setProperty name="helper" property="*"> 自動映射請求參數到 Bean 屬性。隱患:

  • 請求缺參數時,Bean 屬性保持舊值而非置空,導致跨請求數據殘留(如請求 1 設 first/last,請求 2 只傳 last,first 仍為上次值)。
  • HTML 表單未勾選的 checkbox 不發送參數,同理導致舊值殘留。

解決:每請求重置 Bean 狀態,或手動清空未傳遞字段。

表現層常見反模式與重構

反模式問題重構方向
多視圖重複控制代碼Guard Tag 分散,維護困難集中到 Controller + Command Helper
暴露表現層數據結構給業務層HttpServletRequest 滲透業務層,耦合度高,非 Web 客戶端難復用提取通用 DTO/參數對象傳遞
暴露表現層結構給領域對象領域模型依賴協議細節,復用性受損同理,傳遞純粹數據對象
允許重複表單提交導致重複事務(重複扣款、發貨)同步器令牌模式
直接暴露敏感資源配置、屬性、類文件可被直接下載置於 /WEB-INF/、安全約束、隱藏映射
誤解 <jsp:setProperty> 行為以為缺參會置 null,實則保留舊值請求前主動初始化/重置 Bean
臃腫控制器邏輯堆砌,難測試、難維護委派給 Command 對象,保持 Controller 輕量

總結

表現層設計應遵循「集中控制、分離關注點、保護數據完整性、最小化耦合」。採用 Front Controller + Command + DTO 架構,配合聲明式安全與驗證框架,可構建健壯可維護的企業級 Web 應用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved