Struts 簡介
Struts 是 Apache 軟件基金會(ASF)頂級開源項目,早期屬於 Jakarta 子項目,2004 年 3 月獨立。它基於 Java Servlet/JSP 技術,實現了 Java EE Web 應用中的 MVC 設計模式,是經典 MVC 框架的代表作。名稱 "Struts"(支柱)寓意其在 Web 應用中扮演基礎支撐角色。
發展歷程與核心價值
Struts 旨在解決早期 JSP/Servlet 開發中代碼復用性差、業務邏輯與展示邏輯耦合嚴重等問題。核心服務包括:
- 控制器 Servlet(ActionServlet)
- 豐富的標簽庫(HTML、Logic、Bean、Tiles 等)
- 國際化(i18n)支持框架
- JDBC 數據源與連接池管理
- XML 解析工具、文件上傳下載機制
架構原理:MVC 三層在 Struts 中的映射

視圖層
- JSP 頁面:負責數據展示與用戶交互界面。
- ActionForm:封裝表單數據的 JavaBean,無業務邏輯,僅提供 getter/setter,屬性與表單字段一一對應。Struts 通過它將用戶輸入傳遞給控制器。
- Struts 標簽庫:簡化 JSP 開發,實現數據綁定、邏輯判斷、迭代等展示邏輯。
控制器層
- ActionServlet:核心控制器,繼承
HttpServlet,重寫 doGet/doPost,接收所有請求並委派處理。
- struts-config.xml:核心配置文件,定義請求路徑(path)到 Action 的映射、FormBean 配置、全局轉發等。
模型層
- Action:業務控制器,不直接實現業務邏輯,而是調用 Service/DAO/EJB 等業務組件,封裝調用過程並返回
ActionForward 指定下一視圖。
- 業務邏輯本身由 JavaBean/EJB 實現,Struts 僅負責調度。
請求處理全流程(7 步走)

- 啟動初始化:Web 應用啟動時初始化 ActionServlet,加載
struts-config.xml,將映射關係緩存至 ActionMapping 對象。
- 請求攔截:用戶請求到達 ActionServlet,根據請求 URL 查找匹配的
ActionMapping;失敗返回路徑無效。
- 表單處理:根據映射檢查對應
ActionForm 是否存在,不存在則創建並自動填充請求參數。
- 驗證邏輯:若配置
validate="true",調用 ActionForm.validate();返回 ActionErrors 表示驗證失敗,轉回輸入頁;返回 null 繼續流程。
- Action 定位與實例化:根據
ActionMapping 找到目標 Action 類,不存在則實例化。
- 業務執行:調用
Action.execute(),返回 ActionForward。
- 視圖轉發:ActionServlet 根據
ActionForward 轉發至目標 JSP,渲染響應返回用戶。
關於 MVC 分層的爭議與實踐建議
業界對 Action 是屬於 Controller 還是 Model 存在不同見解。實踐中建議:
- Action 作為「薄控制器」,僅負責請求分發、數據封裝、流程控制。
- 核心業務邏輯下沉至 Service 層,Action 僅調用 Service。
- ActionForm 純粹作為數據傳輸對象(DTO),不包含驗證邏輯(可改用獨立 Validator)。
學習框架如學駕駛,理論是地圖,實戰才是路。深入理解原理後,必須在項目中反覆練習,方能駕輕就熟。