struts.xml 是 Struts 2 應用的核心配置文件,掌握其常用配置技巧能大幅提升專案可維護性與擴展性。本文系統梳理五大核心配置點:模組化引入、Action 別名與多方法、Action 參數注入、Result 類型選擇、全局 Result 復用。
隨著專案增長,單一 struts.xml 會變得臃腫。可將功能模組拆分為多個 XML,再在主文件引入:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"https://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="demo" extends="struts-default">
<action name="submit" class="action.MoreSubmitAction">
<result name="save">/result.jsp</result>
<result name="print">/result.jsp</result>
</action>
</package>
</struts>
<struts>
<include file="newstruts.xml"/>
<package name="test" extends="struts-default">...</package>
</struts>
注意:被引入文件必須是完整的 Struts 配置(含 DOCTYPE),<include> 是獨立解析,非單純文本合併。
優勢:結構清晰、易維護、跨專案復用。
一個 Action 類可對應多個邏輯動作,通過 method 屬性指定執行方法,並給予不同 name(別名):
<action name="test" class="action.MyAction">...</action>
<action name="my" class="action.MyAction" method="my">...</action>
Action 類需提供對應方法:
public String execute() { ... } // 對應 test
public String my() { ... } // 對應 my
替代方案:URL 直接指定方法 actionName!method.action(無需在 XML 配置),詳見《Struts 2 教程 2》。
Struts 1.x 僅支援單一 parameter 屬性,Struts 2 可用 <param> 注入任意多個參數:
<action name="submit" class="action.MyAction">
<param name="param1">value1</param>
<param name="param2">value2</param>
<result name="save">/result.jsp</result>
</action>
Action 類只需提供對應的 setter:
private String param1, param2;
public void setParam1(String param1) { this.param1 = param1; }
public void setParam2(String param2) { this.param2 = param2; }
框架在 execute() 前自動注入,參數值在 Action 中直接可用。
預設 type="dispatcher"(請求轉發)。常用類型:
redirect:重定向 <result name="save" type="redirect">/result.jsp</result>redirectAction:重定向到另一 Actionstream:下載文件/二進制流chain:Action 鏈調用freemarker/velocity/xslt:模板引擎完整列表見 struts-default.xml 中的 <result-types> 定義。
多個 Action 共用同一結果頁(如通用錯誤頁、列表頁)時,定義於 <package> 下:
<package name="demo" extends="struts-default">
<global-results>
<result name="print">/result.jsp</result>
</global-results>
<action name="submit" class="action.MoreSubmitAction">...</action>
<action name="my" class="action.MoreSubmitAction" method="my">...</action>
</package>
Action 未定義同名 <result> 時自動回退至全局結果。
| 配置點 | 關鍵標籤/屬性 | 適用場景 |
|---|---|---|
| 模組化 | <include file="..."/> | 大型專案、跨專案共享配置 |
| 多方法/別名 | method、name | 單一 Action 類處理多種業務邏輯 |
| 參數注入 | <param name="">value</param> | 靜態配置值注入 Action |
| Result 類型 | type="redirect|stream|chain..." | 控制頁面跳轉/響應方式 |
| 全局 Result | <global-results> | 共用結果頁、減少重複配置 |
靈活運用這些配置,能讓 Struts 2 應用結構更清晰、擴展更從容。