Struts 2 以 WebWork 2 為核心,融合 Struts 優勢,打造輕量、可測試、高擴展的 MVC 框架。本文概覽其核心特性、請求處理流程與底層設計模式。
| 特性 | 說明 |
|---|---|
| 無 Servlet API 依賴 | 透過 RequestAware、SessionAware 等介面存取 HTTP 資源,Action 易於單元測試 |
| CSS 驅動標籤庫 | 標籤自動產生表格結構(<s:textfield> 含 <tr><td>),支援模板自訂 |
| 有狀態 Checkbox | 未勾選也能提交值,無需特殊判斷 |
| 靈活取消按鈕 | 可指定不同 Action 處理取消操作 |
| 內建 AJAX 支援 | 基於 Dojo Toolkit,提供豐富 UI 元件(如日期選擇器) |
| Spring 深度整合 | Spring 管理 Action 生命週期,依賴注入無縫套用 Hibernate/iBatis |
| 多樣結果型別 | JSP、FreeMarker、Velocity、JasperReports、JFreeChart、Action 鏈、檔案下載 |
| POJO 表單與 Action | 消除 ActionForm,直接用 JavaBean 接收資料;任意類別可為 Action |
| 插件架構 | JAR 擴展功能,支援熱插拔,內建 JSF、JasperReports、Tiles 等 |
| 內建效能分析 | 無需外部工具即可定位熱點 |
| 精確錯誤報告 | 運行時錯誤定位精準 |
| 易測試 Action | 普通 POJO,無需 Mock Http 物件 |
| 智慧預設值 | 絕大多數配置有合理預設,開箱即用 |
| 可定制控制器 | 攔截器過濾 Action 前後邏輯 |
| 內建除錯支援 | 開發期快速定位問題 |
| 模板驅動標籤 | FreeMarker/Velocity 模板自訂輸出,免寫 Taglib API |

ActionContextCleanUp,利於 SiteMesh 整合)FilterDispatcher 詢問 ActionMapper 判斷是否需調用 ActionActionProxy 處理ActionProxy 透過 Configuration Manager 讀取配置,尋找 Action 類ActionInvocation 實例ActionInvocation 按命名模式調用:Action 執行前後穿插攔截器struts.xml 尋找 Result(通常為 JSP/FreeMarker),過程中可使用 Struts 標籤,再次涉及 ActionMapper所有物件(Action、Result、Interceptor 等)均由 ObjectFactory 建立,支援 Spring 整合。