Java EE 5(2006.5 發布)引入 JSF 1.2、EJB 3.0、JAX-WS 2.0,直指企業級開發痛點。面對 Struts、Spring、Hibernate 等事實標準,Java EE 5 是否能一統江湖?本文從三大核心維度逐項對比,給出理性參考。
| 特性 | Struts | JSF |
|---|---|---|
| MVC 支援 | 核心在 Controller(單一 Handler) | 組件事件驅動,多 Handler,更靈活 |
| POJO 支援 | ActionForm 需繼承框架類,緊耦合 HTTP | 原生支援 POJO,利於 RAD 工具快速建模 |
| 頁面導航 | 綁定 Action,規則重複 | 解耦於 Action,組件間可共享規則 |
| UI 組件 | 無內建機制,依賴第三方標籤庫 | 完整組件模型,支援 RenderKit 多重渲染,商業工具可拖拉拽開發 |
結論:JSF 架構更現代、擴展性更強,但學習曲線陡峭、早期實現較重。Struts 2(WebWork 後裔)已大幅改進,兩者並存局面將持續。
| 維度 | Spring | EJB 3.0 |
|---|---|---|
| 標準地位 | 開源框架,由 Interface21 主導,商業利益可影響路線 | Java EE 5 正式規範,多廠商支援,長期演進有保障 |
| 持久化整合 | 整合 JDBC/Hibernate/iBatis/JDO,切換需重構 DAO | JPA 統一標準,底層可換 Hibernate/TopLink/EclipseLink,零代碼修改 |
| 宣告式服務 | XML 配置,冗長且易出錯 | 標註驅動,簡潔優雅,編譯期檢查 |
| 依賴注入 | 通用 XML/API,複雜度高 | 標註注入 EJB/資源/JNDI,語義清晰 |
| 叢集支援 | 無原生方案,需第三方擴展 | 容器級原生叢集:負載均衡、分散式快取、狀態複製 |
結論:EJB 3.0 在標準化、持久化靈活性、叢集能力上佔優;Spring 生態成熟、輕量、社區活躍,對中小專案、非全功能容器環境仍具吸引力。Spring 2.0+ 已支援 JPA,兩者邊界模糊化。
不可直接比較:Hibernate 是 ORM 實現,JPA 是 ORM 規範。Gavin King 參與 JPA 設計,Hibernate 可作為 JPA Provider 運行。選擇 JPA 意味著鎖定標準介面,底層可平滑切換實現;直接用 Hibernate API 則擁有更豐富原生功能(Criteria、ScrollableResults 等)。
廠商工具鏈成熟度(NetBeans、Eclipse WTP、商業 IDE)將成為關鍵變數。技術選型無銀彈,團隊能力、專案屬性、長期演進策略 才是決策核心。