

DefaultActionMapper,支持 REST 風格 URL。ActionProxy 由工廠創建,負責獲取 Action(本地/遠程);ActionInvocation 持有 Action 實例,負責執行鏈(攔截器調度在此實現)。
XmlConfigurationProvider 解析 struts.xml。add.action)。ActionContextCleanUp → 其他(如 SiteMesh) → FilterDispatcher(核心控制器)。FilterDispatcher 通過 ActionMapper 確定目標 Action。ActionProxy(實際由 Dispatcher 執行)。ActionProxy 根據 struts.xml 找到 Action 類(如 edisundong.AddAction)。ActionInvocation 實例。ActionInvocation 按配置順序調用攔截器鏈,最終執行 Action。ActionInvocation 根據 struts.xml 映射找到 Result(如 add.jsp),支持 PreResultListener 介入。// 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()
}
攔截器是 AOP 實現,在 Action 執行前後插入橫切邏輯。struts-default.xml 預定義 30+ 攔截器(如 params、validation、workflow、fileUpload 等),通過攔截器棧組合使用。
Action 執行完畢,ActionInvocation 根據結果碼查找 <result> 配置,轉發至 JSP 或鏈接到另一 Action。