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

Struts 2 核心配置詳解:攔截器、Action、Result 元素完全指南

     編輯:Java 相關知識

三大處理元素

interceptors (攔截器) → Action (業務邏輯) → Result (結果渲染)。

1. 攔截器配置

單一攔截器註冊

<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()
modelDrivenModelDriven.getModel() 模型屬性注入
fileUpload多部分檔案上傳處理
i18nLocale 設定
checkbox處理未勾選 checkbox 的 false 值
profiling效能分析

套用攔截器堆疊

<default-interceptor-ref name="defaultStack"/> <!-- 套用至整個 package -->

<action name="myAction" class="MyAction">
  <interceptor-ref name="secureStack"/> <!-- 單一 Action 覆寫 -->
</action>

2. 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} 代表第一個 * 捕獲的內容。

預設 Action (無匹配時)

<package name="demo" namespace="/demo" extends="struts-default" default-action-ref="fallback">
  <action name="fallback" class="FallbackAction">...</action>
</package>

3. Result 配置

標準 Result Token (ActionSupport 常數)

SUCCESS = "success", NONE = "none", ERROR = "error", INPUT = "input", LOGIN = "login"

Result 元素屬性

屬性預設說明
namesuccess對應 Action 回傳字串
typedispatcherResult 類型:dispatcher/redirect/redirectAction/stream/json/freemarker/velocity 等

區域 Result (Action 內嵌)

<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>

全域 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 (EL 運算式)

<result name="next" type="redirect">${nextAction}</result>

Action 需提供 getNextAction() 回傳目標 URL。

Result Type 註冊與預設值

<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 繼承,大幅減少重複配置。

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