
系列博客側重四大核心問題:
Struts 1 並非黑魔法,而是對 Java Servlet/JSP 標準 API 的二次封裝與重組。 它專注於解決 MVC 中 View(視圖)與部分 Controller(控制) 的協調問題:
關鍵洞見:它能實現的功能,純 Java Servlet/JSP 同樣能實現。框架的價值在於「約定優於配置」帶來的標準化與效率提升,而非提供不可替代的新能力。
得益於開源,深入閱讀源碼可獲得:
計劃 20 天完成,實際拖延至暑假結束。主要干擾:畢業事務、考試系統安排、假期規劃缺失。教訓:
| 模塊 | 核心類/配置 | 關鍵點 |
|---|---|---|
| 入口控制 | ActionServlet, web.xml | 前端控制器,初始化模塊、加載配置、分發請求 |
| 請求處理 | RequestProcessor | 模板方法定義處理流程:多部分解析→路徑映射→Locale/內容類型/緩存→ActionMapping→角色檢查→ActionForm 創建/填充/驗證→Forward/Include→Action 創建/執行→結果轉發 |
| 動作封裝 | Action, ActionForm, ActionForward, ActionMapping | Action 執行業務邏輯;ActionForm 封裝表單數據與驗證;ActionForward 定義導航結果;struts-config.xml 聲明映射 |
| 進階 Action | DispatchAction, LookupDispatchAction, MappingDispatchAction | 單類多方法,根據參數/映射分發,減少 Action 類數量 |
| 類型轉換 | Commons BeanUtils, Converter, ConvertUtils | 內置基本類型轉換,自定義 Converter + PlugIn/Servlet 註冊擴展(如 java.util.Date) |
| 驗證框架 | Validator, validation.xml, validator-rules.xml | 聲明式驗證規則,支持正則、方法、JavaScript 生成 |
| 國際化 | MessageResources, ApplicationResource.properties | 鍵值對資源包,JSTL <bean:message> 顯示 |
| 標籤庫 | HTML/Logic/Bean/Nested/Tiles 標籤庫 | 封裝表單生成、邏輯判斷、Bean 訪問、巢狀屬性、頁面佈局 |
| 異常處理 | ExceptionHandler, struts-config <exception> | 聲明式異常映射到錯誤頁/Action |
| 模塊化 | ModuleConfig, prefix | 多模塊隔離,各自獨立配置、Action、資源 |
Struts 1 (2000-2008) │ ├─→ Struts 2 (WebWork 核心) : 攔截器鏈、OGNL、動作類 POJO、REST 支持 │ ├─→ Spring MVC (2004-) : 註解驅動、DispatcherServlet、HandlerMapping/Adapter、視圖解析器、與 Spring IoC/AOP 深度整合 │ └─→ JSF / Wicket / Tapestry : 組件化 Web 框架另類路線
Struts 1 的歷史使命已完成,但其確立的 前端控制器 + 請求處理鏈 + 聲明式配置 範式,深刻影響了後續所有 Java Web 框架。理解 Struts 1,就是理解現代框架的「祖師爺」邏輯。
技術迭代無窮,但核心原理相通。Struts 1 以其簡潔、透明的架構,成為學習 Java Web 框架本質的最佳教材。完成這個系列,不僅掌握了一個「過時」框架,更建立起「框架即代碼、源碼即文檔、配置即契約」的工程師心智。下一站:Spring MVC 源碼深度解析。