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

Java 表現層框架三雄對決:Struts vs Tapestry vs JSF 深度比較

     編輯:Java 相關知識

前言:三大框架的歷史定位

Struts 早期佔據主導,Tapestry 3.0 以組件化架構嶄露頭角,Sun 推出 JSF 標準化技術。雖 JSF 早期不成熟,但 1.1 版後正面迎戰。三者並非單純正面競爭,各有側重,選型需依專案需求。

表現層框架核心功能抽象

所有框架必須實現三大核心能力:

  1. 元件內容顯示: 頁面直接綁定元件物件,避免在 JSP 嵌入 Java 程式碼
  2. 事件觸發與參數提交: 表單送出或連結點擊觸發伺服器端處理,自動綁定參數
  3. 頁面導航: 視圖間跳轉控制

詳細技術比較表

比較維度StrutsTapestry 3.0JSF
View 顯示元件要求 必須繼承 ActionForm 分顯式/隱式調用,元件繼承 BaseComponent 普通 POJO,無需繼承,使用 Managed Bean
元件在 View 顯示粒度 頁面與 ActionForm 1:1:1,難以引入多元件 可任意嵌入多元件,無數量限制 同 Tapestry,支援細粒度元件組合
頁面分區/組合 Tiles 標籤庫,需額外 tiles-def.xml 元件擁有獨立視圖,自然組合,強大頁面組合能力 元件+標籤庫實現 Subview,複用 Layout 需結合 Tiles
頁面跳轉 html:link 指定 path,需對照 struts-config.xml,與 Action 耦合 目標為元件名/頁面名,無 path 概念,元件名即路徑,穩固方便 類似 Struts,需在 faces-config.xml 查找 navigation rule
參數傳遞 html:link 多參數處理麻煩 直接調用元件賦值,無參數個數限制 參數分離傳遞給元件
事件觸發粒度 表單層級單一事件,無法細化到欄位 可為每個欄位綁定事件,需實作 PageListener 同 Tapestry,細化到欄位,需實作 ActionListener

Struts 元件程式模型痛點

  • 單一 ActionForm 易變成「大雜燴」,違反封裝原則
  • 手動塞入 request/session 退回 JSP 式開發
  • 多元件需透過 Tiles 平行處理或串聯 Action 轉發,增加複雜度
  • 標籤庫與自訂元件結合點繁瑣,開發體驗較差

標籤庫 vs 元件庫

Struts/JSF 採用標籤庫+元件模式,需處理標籤與元件綁定。Tapestry 以元件庫取代標籤庫,純元件組合,無標籤庫學習成本,但需轉換思維(脫離 JSP 體系)。

頁面跳轉實例對比

  • Struts: <html:link page="/targetPath"> 需維護 path 映射,修改配置檔波及所有頁面
  • JSF: 導航規則定義於 faces-config.xml,from-outcome 對應目標
  • Tapestry: 直接指定目標元件/頁面名,<a jwcid="@DirectLink" listener="ognl:gotoTarget">,元件名即路徑,零配置

總結與選型建議

  • JSF ≈ Struts 2.0: 同屬標籤庫+元件陣營,但元件無繼承限制,事件粒度更細
  • Tapestry 為純元件框架: 頁面靈活度最高,適合複雜 UI 組合需求
  • 選型策略:
    • 新專案 → 直接上 JSF
    • 既有 Struts 專案 → 無痛遷移不必強求,若需轉型可評估 JSF + Tapestry
    • 高度客製化 UI、複雜元件組合 → 首選 Tapestry
  • 三者皆支援 HTML 以外的 WML、XUL 等多種客戶端語言

若說 Struts 是左派、Tapestry 是右派,JSF 便是中間派——中庸主義正是 Sun 聯盟一貫策略。

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