首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Struts 開發指南:MVC 架構演進與 Struts 核心機制

     編輯:Java 相關知識

MVC 起源與核心職責

  • Model (模型):業務數據與邏輯核心 (JavaBean、EJB、Service、DAO)。
  • View (視圖):用戶界面渲染 (JSP、Velocity、Thymeleaf、JSON/REST)。
  • Controller (控制器):接收請求、協調 Model/View、決定導航 (Servlet、Action、DispatcherServlet)。

MVC 實現功能模塊與顯示模塊分離,提升可維護性、可擴展性、可移植性、組件復用性。

Web 早期混沌:Model 1 vs Model 2

模型架構缺點
JSP Model 1JSP 獨攬請求處理、業務邏輯、頁面渲染Java 代碼與 HTML 混雜,職責不清,難以維護,頁面導航硬編碼
JSP Model 2Servlet (Controller) + JSP (View) + JavaBean (Model)易產生多個 Controller,頁面導航分散在 Servlet 代碼中,缺乏統一配置

Struts 橫空出世:Model 2 的標準化實現

  • 2000 年 5 月 Craig McClanahan 提交 Apache Jakarta。
  • 2001 年 7 月 Struts 1.0 發布,成為事實標準。

Struts 核心差異化特性

  1. 單一核心控制器:ActionServlet 統一入口,生命週期由容器管理。
  2. XML 聲明式導航:struts-config.xml 中 <forward> 集中管理頁面跳轉,修改無需改代碼。
  3. Action 封裝業務邏輯入口:execute() 方法接收映射後的 Form、Mapping、Request、Response,返回 ActionForward。
  4. 表單數據自動裝配與校驗:ActionForm (含 validate()) + DynaActionForm (動態屬性)。
  5. 標籤庫生態:Bean/HTML/Logic/Tiles/Nested Taglib,JSP 零 Scriptlet。
  6. 國際化 (I18N) 內建:MessageResources + <bean:message>。
  7. 異常處理聲明式配置:<global-exceptions> / Action 級 <exception>。

Struts 核心處理流程

用戶請求 (*.do)
    ↓
ActionServlet (Front Controller)
    ↓
RequestProcessor (模板方法模式)
    ├─ 1. 識別 ActionMapping (根據 path)
    ├─ 2. 創建/獲取 ActionForm → 自動填充請求參數
    ├─ 3. Form.validate() → 有錯誤則返回 input 頁面
    ├─ 4. 實例化/獲取 Action (單例模式)
    ├─ 5. Action.execute(mapping, form, request, response)
    │      ├─ 委託 BusinessDelegate / Service
    │      ├─ 處理業務異常 (拋出供框架捕獲)
    │      └─ 返回 ActionForward (邏輯視圖名)
    └─ 6. 根據 Forward 轉發/重定向到 JSP/Tiles/Action

關鍵組件深度解析

ActionForm:View Helper 模式

  • 封裝 HTML Form 數據,JavaBean 規範 (getter/setter)。
  • validate() 返回 ActionErrors,框架自動回顯錯誤。
  • reset() 清空表單,支援向導式多步驟。
  • DynaActionForm:struts-config.xml 聲明屬性,無需寫 Java 類,適合快速原型。

Action:Request Handler,單例多線程

  • 線程不安全:絕不在 Action 實例變量保存請求狀態。
  • 業務訪問採用 Business Delegate 模式,解耦服務查找與異常轉換。
  • 派生類型:
    • DispatchAction:根據參數 method=xxx 分發到 xxx() 方法 (CRUD 合一)。
    • LookupDispatchAction:根據提交按鈕 name (國際化鍵值) 分發,更安全。
    • MappingDispatchAction:根據 <action> 的 parameter 屬性分發。

ActionForward:導航解耦

邏輯名稱 (success, failure) 映射物理路徑,支援全局與局部覆蓋,redirect="true" 可強制重定向 (防表單重復提交)。

總結

Struts 將 Model 2 落地為可配置、可擴展、工具化的框架,確立了 Java Web 框架的基因:前端控制器、攔截器鏈、聲明式導航、表單綁定、標籤庫。雖已退出歷史舞臺,其設計思想深刻影響 Spring MVC、WebWork/Struts2、JSF 等後繼者。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved