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

Struts 2 配置詳解:套件、命名空間、Action、Result 與攔截器

     編輯:Java 相關知識

Struts 2 引入 WebWork 配置機制,大幅提升靈活度。本文系統梳理 struts.properties、struts.xml 的核心配置要素。

配置檔案層級與優先順序

  • struts.properties(WEB-INF/classes):系統級常數
  • struts.xml:Action、Result、攔截器等應用配置
  • web.xml Filter 參數:部署層級覆蓋

三者可相互覆蓋,例如 struts.i18n.encoding=UTF-8 三處皆可設定。

Package:邏輯模組化與繼承

<package> 將相關 Action、Result、攔截器分組,支援繼承:


<package name="default" extends="struts-default" namespace="/">
  <action name="foo" class="mypackage.SimpleAction">
    <result>greeting.jsp</result>
  </action>
</package>
屬性必填說明
name是Package 識別名,供繼承引用
extends否繼承父 Package 行為
namespace否URL 前綴,預設 /
abstract否抽象 Package,不定義 Action

解析順序自上而下,父 Package 必須在子 Package 之前定義。

Namespace:避免 Action 名稱衝突

  • /:根命名空間,直接對應 Context 路徑
  • ""(空字串):預設命名空間,找不到時回退
  • 自訂如 /barspace:URL 需包含前綴 /barspace/actionName

查找順序:指定 namespace → 根 namespace → 預設 namespace。Struts 標籤可指定 namespace 提交不同模組 Action。

Action 配置詳解


<action name="Logon" class="tutorial.Logon" method="execute">
  <result type="redirect-action">Menu</result>
  <result name="input">/tutorial/Logon.jsp</result>
</action>
  • name:與 namespace 組合唯一標識
  • class:Action 實現類,預設 ActionSupport
  • method:指定執行方法,支援通配符

方法通配符


<action name="*Crud" class="example.Crud" method="{1}"/>  
<!-- editCrud → edit(), deleteCrud → delete() -->

<action name="Crud_*" class="example.Crud" method="{1}"/>
<!-- Crud_input → input(), Crud_delete → delete() -->

預設 Action 與通配符 Action


<!-- 無 class 時使用 ActionSupport -->
<action name="Hello"/>

<!-- 找不到 Action 時回退 -->
<default-action-ref name="UnderConstruction"/>

<!-- 通配符映射到同名 JSP -->
<action name="*">
  <result>/{1}.jsp</result>
</action>

Result 配置

五大預設結果名:success、none、error、input、login。


<result-types>
  <result-type name="dispatcher" class="..." default="true"/>
</result-types>

簡寫形式:<result>/ThankYou.jsp</result>(預設 name=success, type=dispatcher)。

全域 Result


<global-results>
  <result name="error">/Error.jsp</result>
  <result name="login" type="redirect-action">Logon_input</result>
</global-results>

動態 Result


<action name="fragment" class="FragmentAction">
  <result name="next" type="redirect-action">${nextAction}</result>
</action>

Action 中 getNextAction() 決定導向目標。

異常處理:聲明式映射

預設攔截器堆疊已含 exception 攔截器。配置範例:


<global-exception-mappings>
  <exception-mapping exception="java.sql.SQLException" result="SQLException"/>
  <exception-mapping exception="java.lang.Exception" result="Exception"/>
</global-exception-mappings>

<action name="DataAccess" class="com.company.DataAccess">
  <exception-mapping exception="com.company.SecurityException" result="login"/>
  <result name="SQLException" type="chain">SQLExceptionAction</result>
  <result>/DataAccess.jsp</result>
</action>

攔截器:AOP 核心


<interceptors>
  <interceptor name="security" class="com.jpleasure.security.SecurityInterceptor"/>
  <interceptor-stack name="secureStack">
    <interceptor-ref name="security"/>
    <interceptor-ref name="defaultStack"/>
  </interceptor-stack>
</interceptors>

<default-interceptor-ref name="secureStack"/>

Action 可覆蓋堆疊:<interceptor-ref name="defaultComponentStack"/>。攔截器鏈按定義順序執行。

模組化配置


<struts>
  <include file="Home.xml"/>
  <include file="Hello.xml"/>
  <include file="/util/POJO.xml"/>
</struts>

支援相對/絕對路徑,便於大型專案拆分維護。

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