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

Struts2 框架工作流程與核心原理深度解析

     編輯:Java 相關知識

1. Struts2 整體架構

2. 核心組件介紹

  • ActionMapper:HTTP 請求與 Action 的映射,屏蔽 Servlet API 依賴,默認 DefaultActionMapper,支持 REST 風格 URL。
  • ActionProxy & ActionInvocation:
    ActionProxy 由工廠創建,負責獲取 Action(本地/遠程);
    ActionInvocation 持有 Action 實例,負責執行鏈(攔截器調度在此實現)。
  • ConfigurationProvider & Configuration:配置文件解析器,默認 XmlConfigurationProvider 解析 struts.xml。

3. 請求處理完整流程

  1. 客戶端發送請求(如 add.action)。
  2. 經過濾器鏈:ActionContextCleanUp → 其他(如 SiteMesh) → FilterDispatcher(核心控制器)。
  3. FilterDispatcher 通過 ActionMapper 確定目標 Action。
  4. 委派給 ActionProxy(實際由 Dispatcher 執行)。
  5. ActionProxy 根據 struts.xml 找到 Action 類(如 edisundong.AddAction)。
  6. 創建 ActionInvocation 實例。
  7. ActionInvocation 按配置順序調用攔截器鏈,最終執行 Action。
  8. Action 返回結果碼,ActionInvocation 根據 struts.xml 映射找到 Result(如 add.jsp),支持 PreResultListener 介入。

4. 核心源碼流程追蹤

// FilterDispatcher.doFilter 關鍵邏輯
ActionMapperIF mapper = ActionMapperFactory.getMapper();
ActionMapping mapping = mapper.getMapping(request);
if (mapping != null) {
    ActionProxy proxy = ActionProxyFactory.getFactory().createActionProxy(namespace, actionName, extraContext);
    proxy.execute(); // 執行 ActionInvocation.invoke()
}

5. 攔截器機制

攔截器是 AOP 實現,在 Action 執行前後插入橫切邏輯。struts-default.xml 預定義 30+ 攔截器(如 params、validation、workflow、fileUpload 等),通過攔截器棧組合使用。


6. 結果返回

Action 執行完畢,ActionInvocation 根據結果碼查找 <result> 配置,轉發至 JSP 或鏈接到另一 Action。

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