Struts 是 Apache Jakarta 項目組的開源框架,基於 MVC 設計模式,將「顯示邏輯」與「業務邏輯」徹底分離。憑藉 ActionServlet 前端控制器、ActionForm 表單數據封裝、Action 業務處理、struts-config.xml 集中配置等核心組件,Struts 成為早期 J2EE Web 開發的事實標準,深刻影響了後續 Spring MVC、WebWork 等框架設計。
validate() 客戶端/服務端校驗,reset() 初始化。大型應用建議僅作數據傳輸(DTO),業務邏輯下沉至 Service/EJB。Action 調用的 POJO/EJB/Spring Bean,封裝具體業務流程(如 CheckoutService、OrderDAO)。Struts 不強制持久化技術,兼容 JDBC、Hibernate、iBATIS、JPA 等。html、bean、logic、nested、tiles)實現表單綁定、國際化、邏輯控制、佈局複用。ViewResolver 機制整合。struts-config.xml,將請求路徑映射至 ActionMapping。Action 類、ActionForm 名稱、作用域、驗證開關、轉發規則(ActionForward)。execute() 方法接收 ActionForm、請求、響應,返回 ActionForward 指定下一視圖。/login.do。ActionServlet 接收,查找 ActionMapping(path=/login)。ActionForm(name=loginForm, scope=request),自動填充請求參數。ActionForm.validate(),失敗則按 input 屬性返回錯誤頁。Action(type=com.app.LoginAction),調用 execute()。Action 委託 Service 處理業務,根據結果返回 ActionForward(name=success/failure)。ActionServlet 根據 ActionForward 轉發(forward)或重定向(redirect)至目標 JSP/URL。<struts-config>
<form-beans>
<form-bean name="loginForm" type="com.app.form.LoginForm"/>
</form-beans>
<action-mappings>
<action path="/login"
type="com.app.action.LoginAction"
name="loginForm"
scope="request"
validate="true"
input="/login.jsp">
<forward name="success" path="/welcome.jsp"/>
<forward name="failure" path="/login.jsp"/>
</action>
</action-mappings>
<message-resources parameter="ApplicationResources"/> <!-- 國際化 -->
<plug-in className="org.apache.struts.tiles.TilesPlugin"/> <!-- Tiles 佈局 -->
</struts-config>

圖:ActionServlet、ActionForm、Action 交互關係
| 優點 | 缺點 |
|---|---|
| 成熟穩定、文檔豐富、社區龐大 | ActionForm 強耦合 Servlet API,難以單元測試 |
| 標籤庫豐富、國際化、Tiles 佈局強大 | 配置文件繁瑣,大型項目維護困難 |
| 請求處理流程可定制(RequestProcessor) | 非 IoC 容器,依賴查找而非依賴注入 |
| 與 J2EE 生態(EJB、JTA、JAAS)無縫整合 | 單線程 Action 實例需開發者自行保證線程安全 |
Struts 將 MVC 模式在 Servlet/JSP 基礎上工程化、標準化,其「前端控制器 + 配置驅動 + 標籤庫」架構思想至今仍是現代 Web 框架(Spring MVC、Struts2、JSF)的基因來源。雖然 Struts 1.x 已進入維護模式,但研讀其源碼與設計哲學,對理解 Web 框架本質、掌握 MVC 精髓仍具極高價值。