J2EE 陣營 MVC 框架百花齊放,Struts 為老牌霸主,Spring MVC 後起之秀。本文從架構哲學、核心組件、擴展性三維度剖析異同,助你專案選型。
Apache Jakarta 專案,Craig McClanahan 主導,佔據最大市場份額,經過 5 年洗禮,極度成熟穩定。
| 層 | Struts 組件 | 職責 |
|---|---|---|
| View | JSP + TagLib (Bean/Html/Logic/Nested/Template) | 頁面渲染、表單綁定、邏輯判斷 |
| Model | ActionForm Bean + Util 包 | 表單資料承載、驗證、轉持久化 |
| Controller | ActionServlet + Action/ActionMapping/ActionForward | 請求分發、流程控制、視圖跳轉 |
ActionServlet (Front Controller) 接收所有請求。ActionMapping。ActionForm。Action.execute() 執行業務邏輯。ActionForward 轉向 JSP/Tiles/Velocity 等視圖。Rod Johnson 《J2EE Development without EJB》 思想落地,輕量級 IoC/AOP 容器,非侵入式,支援 POJO 開發。
| 特性 | 說明 | |
|---|---|---|
| IoC (控制反轉) | 依賴注入取代查找,降低耦合,容器管理 Bean 生命週期 | |
| AOP (面向切面) | 橫切關注點 (事務/日誌/權限) 與業務邏輯分離 | |
| 容器 | 管理 Bean 定義、作用域 (singleton/prototype)、關係裝配 | |
| 框架整合 | 聲明式事務、Hibernate/JPA/MyBatis 無縫整合、JMS/REMOTING 等 |
| 維度 | Struts 1.x | Spring MVC |
|---|---|---|
| 學習曲線 | 平緩 (傳統 Servlet 思維) | 中等 (需理解 IoC/AOP) |
| 開發效率 | 配置重、樣板碼多 | 註解驅動、極簡 |
| 測試友好度 | 差 (需 Mock Servlet) | 優 (純 POJO 易測試) |
| 擴展性 | 受限於繼承體系 | 極強 (AOP/攔截器/HandlerAdapter) |
| 社區現狀 | 維護模式,無重大更新 | 活躍,Spring Boot 生態主流 |
| 遷移成本 | 存量巨大 | 新專案首選 |