Struts 2 並非 Struts 1 升級,而是基於 WebWork 2 重構的全新框架。本文提煉學習重點:只關注 5 個核心面向,拒絕標簽庫全量學習陷阱,附遷移對比、環境搭建與登錄項目實戰步驟。
Struts 更新快,若標簽、配置、Action 全學,永無止境。實際開發中:
<s:iterator>、<s:if> 等)。遵循此原則,Struts 1→2 遷移頁面幾乎無需改動;即便 Struts 3 出來,HTML 部分亦不變。
<action>、<result>、全局轉發,2.x 配置一看即懂。| 維度 | Struts 1 | Struts 2 |
|---|---|---|
| Action 類型 | 繼承抽象基類 | 實現接口或純 POJO(有 execute 方法即可) |
| 線程模型 | 單例,需線程安全 | 每請求一實例,天然線程安全 |
| Servlet 依賴 | 強依賴(execute 參數含 request/response) | 無依賴,可脫容器測試;需時可訪問 |
| 測試性 | 難,需 StrutsTestCase 模擬容器 | 易,直接實例化、設置屬性、調用方法 |
| 輸入捕獲 | ActionForm 必繼承基類,常產生冗余類 | Action 屬性直接接收,消除 FormBean;兼容 Form 模式 |
| 表達式語言 | JSTL EL,集合/索引支持弱 | OGNL,強大靈活,支持圖導航 |
| 值綁定視圖 | 標準 JSP 機制綁定對象 | ValueStack,標簽訪問值無需綁定,支持同名不同類型屬性復用視圖 |
| 類型轉換 | Commons-Beanutils,每類一轉換器 | OGNL 內置常用轉換器 |
| 驗證 | validate() 或 Commons Validator | validate() + XWork 驗證框架,支持鏈式驗證子屬性 |
| Action 執行控制 | 模塊級 RequestProcessor,生命周期固定 | 攔截器棧,每 Action 可定制生命周期 |
WEB-INF/libweb.xml 配置 FilterDispatcher(核心控制器)struts.xml 配置 Action 映射與結果視圖WEB-INF/lib 必須顯式放入所需 JARStruts 2 通過 POJO Action、攔截器、OGNL、ValueStack 徹底解決 Struts 1 的痛點。學習時堅持「HTML 歸 HTML,邏輯歸標簽」,聚焦五大核心面向,配合一個登錄項目實戰,即可快速掌握並應對後續版本演進。