日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

拦截器的的调用顺序

發布時間:2025/3/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 拦截器的的调用顺序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

攔截器的的調用順序

a:首先,要找到它自己有沒有聲明攔截器的引用,即<action>元素有沒有<interceptor-ref>子元素,如果有,則不用繼續尋找(即不會再使用b,c即默認的攔截器棧等),直接使用這些攔截器,如果沒有進行下一步的查找。

b:其次,找到這個<action>所在包有沒有聲明默認的攔截器引用,即<package>元素的<default-interceptor-ref>子元素,如果有,則不用繼續再找,直接使用這些攔截器,如果沒有,則進行下一步的查找。

c:遞歸的查找這個包的父包,看看有沒有聲明默認的攔截器引用,直到找到默認的攔截器引用為止。

d:同一層下,攔截器的執行順序為配置的順序

補充:

abstract:把包聲明為抽象包,抽象包就是用來被繼承的(等待被繼承)。只要是沒有<action>元素的包,就可以聲明為抽象包。(抽象包如果不被子包繼承,它里面寫的任何東西都不起作用)?

?注意:@ParentPackage("default")? 值可以是一個抽象包,此時抽象包中的內容也會起作用(比如定義的攔截器等)相當于該抽象包被繼承了。

攔截器的使用方式:
攔截器引用一般是兩種方式
1,
如何使用struts2攔截器,或者自定義攔截器。特別注意,在使用攔截器的時候,在Action里面必須最后一定要引用struts2自帶的攔截器缺省堆棧defaultStack,
如下(這里我是引用了struts2自帶的checkbox攔截器),因為<action>下配置了攔截器,所以默認就不會使用b和c:
<package name="default" extends="struts-default" namespace="/ce">
<interceptors>
<interceptor name="loginInterceptor" class="com.action.LoginInterceptor"/>
</interceptors>
<action name="hello" class="com.action.HelloWorld" method="hello">
<interceptor-ref name="loginInterceptor"/>
<interceptor-ref name="defaultStack"></interceptor-ref>(必須加,否則不會使用默認攔截器棧中的攔截器)
<result name="success">/WEB-INF/index.jsp</result>
</action>
</package>

也可以改為對全局Action設置自己需要的攔截器,如下:
2,
struts-action.xml里面配置Action如下:
<!-- 一個公共包 -->
<package name="myDefault" extends="struts-default" abstract="true">
<!-- 聲明攔截器 -->
<interceptors>
<interceptor name="checkLogin"
class="com.itheima.web.interceptors.CheckLoginInterceptor"/>
<!-- 定義一個攔截器棧 -->
<interceptor-stack name="myDefaultStack">
<interceptor-ref name="checkLogin">
<!-- 由于我們使用了繼承MethodFilterInterceptor,
此時我們可以告知攔截器,排除掉登錄方法 -->
<param name="excludeMethods">login</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>(同一層下,攔截器的執行順序為配置的順序,即先執行checkLogin,后執行defaultStack下的19個攔截器)
</interceptor-stack>
</interceptors>
<!-- 修改默認攔截器棧,設置我們自定義的攔截器棧,
這樣的話我們寫的所有動作都有了檢查登錄功能。并且排除了登錄方法-->
<default-interceptor-ref name="myDefaultStack"/>
<!-- 全局結果視圖 -->
<global-results>
<result name="login">/login.jsp</result>
</global-results>
</package>

<!-- 配置動作,讓此包繼承我們自己寫的公共包myDefault -->
<package name="customer" extends="myDefault" namespace="/customer">
<!-- 查詢所有客戶 -->
<action name="findAllCustomer" class="com.itheima.web.action.CustomerAction"
method="findAllCustomer">
<result name="findAllCustomer">/jsp/customer/list.jsp</result>
</action>
</package>

?

相關鏈接:

https://www.cnblogs.com/wwicked/articles/4455477.html

https://www.cnblogs.com/yw-ah/p/5761235.html

https://www.cnblogs.com/Ant-soldier/p/5490035.html

轉載于:https://www.cnblogs.com/zxwBj/p/8552471.html

總結

以上是生活随笔為你收集整理的拦截器的的调用顺序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。