interceptors (攔截器) → Action (業務邏輯) → Result (結果渲染)。
<interceptors>
<interceptor name="security" class="com.company.SecurityInterceptor"/>
<interceptor-stack name="secureStack">
<interceptor-ref name="security"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
| 攔截器 | 功能 |
|---|---|
| validation | 驗證 Action 屬性 (XML/註解) |
| params | 請求參數注入 Action setter (含型別轉換) |
| servletConfig | 注入 HttpServletRequest/Response/Session |
| prepare | 呼叫 Preparable.prepare() |
| modelDriven | ModelDriven.getModel() 模型屬性注入 |
| fileUpload | 多部分檔案上傳處理 |
| i18n | Locale 設定 |
| checkbox | 處理未勾選 checkbox 的 false 值 |
| profiling | 效能分析 |
<default-interceptor-ref name="defaultStack"/> <!-- 套用至整個 package -->
<action name="myAction" class="MyAction">
<interceptor-ref name="secureStack"/> <!-- 單一 Action 覆寫 -->
</action>
| 屬性 | 必要 | 說明 |
|---|---|---|
| name | 是 | Action 名稱,對應 URL 最後一段 |
| class | 否 | 完整類別名,預設 ActionSupport |
| method | 否 | 呼叫方法名,預設 execute |
<action name="*Crud" class="example.CrudAction" method="{1}">
<result>/crud/{1}.jsp</result>
</action>
請求 /editCrud.action → 呼叫 edit(),結果導向 /crud/edit.jsp。
{1} 代表第一個 * 捕獲的內容。
<package name="demo" namespace="/demo" extends="struts-default" default-action-ref="fallback">
<action name="fallback" class="FallbackAction">...</action>
</package>
SUCCESS = "success", NONE = "none", ERROR = "error", INPUT = "input", LOGIN = "login"
| 屬性 | 預設 | 說明 |
|---|---|---|
| name | success | 對應 Action 回傳字串 |
| type | dispatcher | Result 類型:dispatcher/redirect/redirectAction/stream/json/freemarker/velocity 等 |
<action name="save" class="SaveAction">
<result name="success">/success.jsp</result>
<result name="input">/form.jsp</result>
<result name="error" type="redirect">/error.action</result>
</action>
<global-results>
<result name="error">/common/error.jsp</result>
<result name="login" type="redirectAction">login</result>
</global-results>
查找順序:Action 內嵌 Result → 繼承 package 的全域 Result → struts-default 全域 Result。
<result name="next" type="redirect">${nextAction}</result>
Action 需提供 getNextAction() 回傳目標 URL。
<result-types>
<result-type name="dispatcher" default="true"
class="org.apache.struts2.dispatcher.ServletDispatcherResult"/>
<result-type name="json" class="org.apache.struts2.json.JSONResult"/>
</result-types>
<struts>
<include file="struts-admin.xml"/>
<include file="struts-api.xml"/>
<package name="admin" namespace="/admin" extends="struts-default">...</package>
<package name="api" namespace="/api" extends="json-default">...</package>
</struts>
include 組合多檔案。package extends 繼承攔截器、Result Type、全域 Result 等配置。掌握「攔截器堆疊組合 → Action 方法分派 → Result 類型選擇」三階段配置模型,即可靈活控制 Struts 2 請求處理管線。善用通配符、動態 Result、package 繼承,大幅減少重複配置。