MVC(Model-View-Controller)設計模式將應用程式拆分為「模型(資料與業務邏輯)」、「視圖(使用者介面)」、「控制器(請求調度)」三大職責,降低耦合、利於分工協作。Sun J2EE 藍圖推薦的 Model 2 架構即是 MVC 在 Web 層的具體落地:JSP 負責視圖、Servlet 擔任控制器、JavaBean/EJB 封裝模型。Struts 作為 Apache 旗下開源專案,將 Model 2 模式框架化、標準化,提供豐富的標籤庫、驗證機制、國際化支援與擴展點,成為早期 J2EE Web 開發的事實標準。
HttpServlet、HttpServletRequest、HttpServletResponse、HttpSession、ServletContextservice() → 分派 doGet/doPost() → 回應客戶端jspInit() → _jspService() → jspDestroy()<jsp:useBean>、<jsp:setProperty>、<jsp:getProperty> 支援四大範圍html:form、bean:write、logic:iterate 等)渲染動態內容。validate())、作為視圖與控制器間的資料傳輸物件(DTO)。HttpServlet,啟動時讀取 struts-config.xml,所有請求統一入口。execute() → 依 ActionForward 轉向)。execute() 呼叫模型業務邏輯,回傳 ActionForward 決定下一個視圖。控制器與視圖的「膠水」,定義:
<form-beans>:ActionForm 類別對應邏輯名稱<action-mappings>:路徑、Action 類別、ActionForm 參考、轉向定義<forwards>、<data-sources>、<plug-ins>(如 Validator、Tiles)*.doActionServlet 接收,委派 RequestProcessorstruts-config.xml 找到 ActionMappingActionForm,自動填充請求參數ActionForm.validate(),失敗則返回 input 頁面Action,呼叫 execute()Action 呼叫模型層業務邏輯ActionForward(如 success、failure)RequestProcessor 依 ActionForward 轉向 JSP 或另一 Action| 優勢 | 局限 |
|---|---|
| 標準化 MVC 實作,降低架構決策成本 | ActionForm 綁定請求參數機制較死板(後來 Spring MVC 以命令物件改進) |
| 豐富標籤庫加速頁面開發 | 單一 ActionServlet 為核心,擴展性受限於繼承體系 |
| 聲明式驗證、國際化、例外處理 | 配置檔隨專案增大變得龐雜(後來採用模組化、註解改善) |
| Tiles 支援版面復用與佈局管理 | 與 Spring、Hibernate 整合需額外配置(Struts 2 / Spring MVC 原生整合更好) |
| 成熟社群、大量實戰案例 | 學習曲線陡峭,XML 配置繁瑣 |
<forward> 復用轉向Struts 以 MVC 為核心,將 Servlet/JSP/JavaBean 等 J2EE 基礎技術整合為連貫的開發框架,極大提升了團隊協作效率與專案可維護性。雖然後來 Spring MVC、Struts 2、JSF 等新框架陸續登場,但 Struts 確立的「前端控制器 + 請求處理器 + Action + ActionForm + 聲明式配置」架構範式,深刻影響了後續所有 Java Web 框架的設計。理解 Struts 核心機制,仍是掌握 Java Web 開發精髓的重要基石。