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

UI 組件與 JSF 應用架構設計:從多層架構到 JCatalog 實戰案例

     編輯:J2EE

本文結合總體架構設計、多層架構理論與 JCatalog 實戰案例,系統闡述 JSF 在表現層的定位、優勢、Managed Bean/Backing Bean/View Object/Domain Model 區分與安全實現策略。

多層架構標準劃分

  • 客戶層:數據模型消費與呈現,通常為瀏覽器(瘦客戶端,無表現邏輯)。
  • 表現層:暴露業務服務給用戶,處理請求、與業務層交互、選擇下一視圖。
  • 業務邏輯層:業務物件與服務,接收請求處理邏輯,受益於安全/事務/資源等系統級服務。
  • 集成層:業務層與 EIS(企業資訊系統)間橋梁,封裝數據交互邏輯,有時與業務層合稱中間層。
  • EIS 層:數據持久化,含關係/物件資料庫、遺留系統。

JCatalog 架構選型

  • 非分散式多層框架:表現層、業務層、集成層同在一 Web 容器,定義良好介面隔離職責,簡單可擴展。
  • 表現層選 JSF:成熟、經考驗的 Web 框架,優於自建。
  • 業務層用 Spring POJO:無遠程訪問需求,EJB 遠程介面非必需,Spring POJO 輕量靈活。
  • 集成層選 Hibernate:對比 Pure JDBC(靈活但笨重)、Entity Bean CMP(昂貴、綁定容器),Hibernate 以物件為中心、輕便、成熟。

JSF 與 MVC:天然契合

  • JSF 為服務端 UI 組件框架,含 API(組件狀態、事件、驗證、轉換、導航、國際化、可擴展)與兩個 JSP 自定義標籤庫。
  • JSF 完美支援 MVC:Backing Bean = Model(含 Controller 擴展)、JSP 頁面 = View、Faces Servlet = Controller。行為與表現清晰分離,支援熟悉 UI 組件概念,不綁定腳本技術。

為什麼選 JSF?五大差異化優勢

  1. 像 Swing 一樣的 OO Web 開發:服務端宣告、事件監聽/處理器的 UI 組件模型。
  2. Backing Bean 管理:組件定義與數據處理物件分離,框架在適當作用域儲存管理實例。
  3. 可擴展 UI 組件模型:標準組件可配置、重用、繼承開發複雜組件(選單、樹)。
  4. 靈活表現模型:Renderer 分離功能與視圖,可為同一組件定義 HTML/WML 不同渲染器。
  5. 可擴展轉換/驗證模型:基於標準 Converter/Validator 開發更強功能。

現狀與不足

JSF 尚不成熟:內建組件/轉換器/驗證器基礎簡單;單組件驗證模型不支援多對多驗證;JSF 標籤與 JSTL 無縫連接不足。

Managed Bean vs Backing Bean vs View Object vs Domain Model

  • Managed Bean:JSF 管理的 JavaBean,描述如何創建/管理,與功能無關。
  • Backing Bean:定義頁面 UI 組件屬性與處理邏輯(驗證、事件、導航),每頁通常一個,但實戰可共享(如 CreateProduct/EditProduct 共用 ProductBean)。
  • View Object:僅表現層使用的模型物件,含顯示數據、驗證、事件處理、業務層交互邏輯。JSF 中 Backing Bean 即 View Object。
  • Domain Model:業務物件(BO),屬業務邏輯層,含業務數據與邏輯。複雜應用需與 View Object 分離,透過 Data Mapping(如 Commons BeanUtils 反射)轉換。

對比 Struts:ActionForm(數據)+ Action(邏輯)分離;JSF Backing Bean 數據與行為合一,更符合 OO 設計習慣。

安全實現:Servlet Filter 最佳

JSF 無內建安全。方案比較:

  • Backing Bean 基類:簡單但耦合繼承結構。
  • ViewHandler 包裝:安全邏輯綁定 JSF 技術。
  • Servlet Filter:JSF 應用本質是 Java Web 應用,Filter 處理認證最恰當,安全邏輯不綁定特定 Web 框架。示例應用用 SecurityFilter 硬編碼保護三頁面,建議改為配置文件驅動。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved