更新時間:2024年01月24日10時52分 來源:傳智教育 瀏覽次數(shù):
如果想對包下的Action使用相同的攔截器,則需要為該包中的每個Action都重復(fù)指定同一個攔截器,這樣寫顯然過于頻繁。為了解決此問題,Struts2中支持使用默認(rèn)攔截器,它可以對其指定的包中的所有Action都起到攔截作用。一旦為某一個包指定了默認(rèn)攔截器,并且該包中的Action未顯示指定攔截器,則會使用默認(rèn)攔截器。反之,若此包中的Action顯示的指定了某個攔截器,則該默認(rèn)攔截器將會被屏蔽。此時,如果還想使用默認(rèn)攔截器,則需要用戶手動配置該默認(rèn)攔截器的引用。
配置默認(rèn)攔截器需要使用:
<default-interceptor-ref>
元素,此元素為:
<package>
元素的子元素。其語法格式如下所示:
<default-interceptor-ref name="攔截器(棧)的名稱"/>
在上述語法格式中,name屬性的值必須是已經(jīng)存在的攔截器或攔截器棧的名稱。下面用該語法格式配置一個默認(rèn)攔截器,示例代碼如下所示:
<package name="default" namespace="/" extends="struts-default"> <!--聲明攔截器--> <interceptors> <interceptor name="interceptor1" class="interceptorClass"/> <interceptor name="interceptor2" class="interceptorClass"/> <!--定義一個攔截器棧myStack,該攔截器棧包含兩個攔截器和一個攔截器棧--> <interceptor-stack name="myStack"> <interceptor-ref name="interceptor1"/> <interceptor-ref name="interceptor2"/> <interceptor-ref name="defaultStack"/> </interceptors> <!--配置包下的默認(rèn)攔截器,既可以是攔截器,也可以是攔截器棧--> <default-interceptor-ref name="myStack"/> <action name="login" class="com.ithiema.aciton.LoginAction"> <result name="input">/login.jsp</result> </aciton> </package>
在上述代碼中,指定了包下面的默認(rèn)攔截器為一個攔截器棧,該攔截器棧將會作用于包下所有的Action。
注意:每一個包下只能定義一個默認(rèn)攔截器,如果需要多個攔截器作為默認(rèn)攔截器,則可以將這些攔截器定義為一個攔截器棧,再將這個攔截器棧作為默認(rèn)攔截器即可。