框架 = 可重用、可擴展、經過驗證的半成品骨架。核心特徵:控制反轉 (IoC) —— 框架調用應用代碼 (Don't call us, we'll call you),提供「命令與控制」基礎設施,開發者填充業務邏輯。
| 框架 | 核心關注點 | 視圖技術 | 特色機制 | 優勢 | 劣勢 |
|---|---|---|---|---|---|
| Struts | 控制器流程標準化 | JSP + Taglib | 單一 ActionServlet、XML 導航、FormBean 自動裝配、Taglib 生態 | 成熟穩定、文檔豐富、MVC 標準實現、工具支援好 | Action 單例線程不安全、配置繁瑣、標籤庫侵入 JSP、無 IoC 容器 |
| Cocoon | XML 處理管道 | XML + XSLT | Generator/Transformer/Serializer 管道、SAX 事件流 | XML 應用首選、內容與展現徹底分離、支援多渠道輸出 | 學習曲線陡峭、非通用 Web 應用首選、性能調優複雜 |
| WebWork | Action 執行上下文 | Velocity/FreeMarker/JSP 可插拔 | Command 模式分發、攔截器鏈、OGNL 表達式、IoC 友好 | 靈活強大、測試易、Struts 2 前身 | 社區較小、文檔不如 Struts 完善 |
| Turbine | 服務組裝與安全 | Velocity | Service/Tool 機制、Scheduler、安全框架、模板服務 | 全棧快速開發、Velocity 模板純粹、成熟組件庫 | 綁定 Velocity、架構相對封閉、後期發展緩慢 |
| Tapestry | 組件化頁面開發 | HTML + 頁面類/模板 | 頁面/組件對象模型、事件驅動、行為與模板分離、Live Class Reloading | 真正組件化、高度封裝、開發效率極高、狀態管理自動 | 學習曲線高、調試困難、早期版本文檔缺乏 |
| Spring | 全層應用基礎設施 | 無綁定 (JSP/Velocity/FreeMarker/Thymeleaf/REST) | IoC 容器、AOP、模板化 JDBC、聲明式事務、抽象資源訪問、MVC 模塊 | 非侵入式、模塊化按需使用、生態統治級、企業級標準 | 核心容器非 Web 專用、MVC 模塊早期不如 Struts 成熟 |
| JSF | 組件化 UI 標準 | Facelets/JSP (組件樹) | UIComponent 樹、事件/驗證/轉換器生命週期、渲染器套件、工具廠商支援 | Java EE 標準、工具廠商深度集成 (IDE 可視化)、組件市場 | 生命週期複雜、狀態保存開銷大、早期版本靈活性差 |
JSF + Struts + Spring + Hibernate/JDO
現實演進:Spring MVC 取代 Struts/JSF 成為主流控制器,Spring Boot 實現自動配置與內嵌容器,MyBatis/JPA 分佈持久層選型,前後端分離 (React/Vue/Angular + REST) 重新定義 View 層。
| 項目特徵 | 推薦棧 | 理由 |
|---|---|---|
| 傳統企業應用、團隊熟悉 Struts、短期交付 | Struts 1.x + Spring (業務層) + Hibernate | 存量資產保護、風險可控 |
| 新建項目、追求現代架構、長期演進 | Spring Boot + Spring MVC + MyBatis/JPA + Vue/React | 生態活躍、雲原生友好、人才豐富 |
| 內容驅動、多渠道發佈、XML 核心 | Apache Cocoon / Hippo CMS | 管道架構天然適配 |
| 高度組件化、狀態富頁面、組件市場需求 | JSF (PrimeFaces/OmniFaces) 或 Tapestry | 組件模型優勢明顯 |
| 輕量微服務、單一職責、容器化部署 | Spring Boot / Micronaut / Quarkus + REST | 啟動快、內存小、GraalVM 原生映像 |
框架無優劣,只有適合與否。理解各框架核心抽象、設計哲學、生態位置,結合團隊技術棧、項目生命週期、業務變化率、運維能力綜合決策。Struts 以「控制器標準化」開啟了 Java Web 框架紀元,其歷史使命已完成,但設計思想永續傳承。