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

Struts 框架核心原理深度解析:從 MVC 設計模式到源碼級工作流程

     編輯:Java 相關知識

Struts 簡介與歷史定位

Struts 是 Apache 基金會早期旗艦項目,作為 Java EE Web 開發中 MVC 模式的經典實現,它確立了「前端控制器 + 配置文件映射 + Action 業務處理」的標準架構範式。雖然現已退出歷史舞臺,但其設計思想深度影響了 Spring MVC、WebWork 等後續框架。

Struts 系統架構三層解析

1. 視圖層

  • JSP 頁面:負責數據展示與用戶交互。
  • ActionForm:表單數據的 JavaBean 封裝體,屬性與表單字段一一對應,提供數據校驗 (validate()) 與數據回顯功能。
  • 標簽庫:html:form, bean:write, logic:iterate 等,簡化 JSP 開發,實現視圖邏輯與業務邏輯分離。

2. 控制層

  • ActionServlet:核心前端控制器,繼承 HttpServlet,生命周期:init() 加載 struts-config.xml → service() 攔截請求 → 委派給 RequestProcessor 處理。
  • Action:業務邏輯入口,開發者繼承並實現 execute(),充當控制層與模型層的適配器。
  • ActionMapping / ActionForward:封裝請求路徑與業務處理類、視圖轉向的映射關係。

3. 模型層

Struts 本身不提供模型實現,但規範了調用方式:Action 中調用 Service/DAO (JavaBean, EJB, Hibernate 等) 完成業務邏輯與持久化。

請求處理完整生命周期

  1. 用戶發起請求 (如 /login.do)。
  2. ActionServlet 接收,查找 struts-config.xml 中匹配的 ActionMapping。
  3. 根據 ActionMapping 實例化或復用 ActionForm,自動填充表單數據。
  4. 若配置 validate="true",調用 ActionForm.validate();失敗則返回 input 頁面。
  5. 實例化對應 Action,調用 execute() 處理業務。
  6. Action 返回 ActionForward。
  7. ActionServlet 根據 Forward 轉發至目標 JSP 渲染響應。

MVC 到 Struts 的演進式推導

文章通過四個版本代碼演示了從「Servlet 硬編碼 if-else」到「配置文件驅動 + 反射 + 策略模式」的架構演進:

  • V1 基礎 MVC:Servlet 直接調用 Manager,轉發硬編碼。
  • V2 標識區分:Servlet 內部用參數判斷增刪改查,if-else 膨脹。
  • V3 模式匹配:*.action 映射 + URL 截取路由,但 Servlet 仍臃腫。
  • V4 策略模式 + 配置文件:抽象 Action 接口,每個業務一個實現類;action-config.xml 映射路徑與類;Servlet 反射實例化 Action,徹底解耦。

Struts 正是將 V4 中的通用邏輯(配置解析、反射實例化、FormBean 管理、Forward 轉發)封裝進框架內部,開發者只需編寫 POJO Action 與 XML 配置。

核心設計模式應用

模式應用場景
前端控制器ActionServlet 統一入口
命令模式Action 封裝請求處理邏輯
策略模式不同 Action 實現不同業務策略
工廠模式RequestProcessor 創建 Action 實例
模板方法RequestProcessor.process() 定義處理骨架

總結

Struts 通過配置文件將 URL、FormBean、Action、Forward 解耦,確立了「約定優於配置」的早期雛形。理解其源碼級流程,能幫助開發者透徹掌握現代 Web 框架的底層運作機制。

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