Struts2攔截器

1、攔截器,和過濾器很相似,是可以在action前後執行的代碼,Struts的核心功能都是通過攔截器來實現的。


Struts攔截器,每個攔截器只有一個對象實例,即採用單例模式,所有引用這個


2、攔截器棧:由多個攔截器組成。

3、攔截器和過濾器的區別:

1)、攔截器和過濾器的概念非常相似。

2)、過濾器屬於web容器,可以過濾一切請求,包括action,servlet,hsp等等

3)、攔截器隸屬於Struts2框架,只能蘭娜姐action,無法攔截jsp的請求

4)、過濾取採用函數回調來實現,攔截器採用動態代理來實現;

4、多個攔截器之間的執行是採用攔截器責任鏈設計模式來實現

HttpServletRequest-->struts Filter Dispatcher-->Interceptor1-->Interceptor2-->Interceptor3-->(Action獲取結果Result)-->Interceptor3-->Interceptor2-->Interceptor1-->HttpServletResponse

5、攔截器的實現步驟:

a)編寫攔截器(實現Interceptor接口或者繼承AcstractInterceptor)

b)在Struts.xml中配置攔截器

c)在action中引用攔截器

6、案例

定義攔截器類

圖略

配置引用攔截器

圖略

7、攔截器的配置詳解

1)、當引用了自定義攔截器後,默認的攔截器就不起作用了

2)、默認攔截器在struts-default.xml中配置了默認攔截器,當不使用自定義攔截器的時候默認攔截器就會起作用

總結:當引用了自定義攔截器後,又不是去原有的默認的攔截器就需要手動引用

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

3)、當一個action引用的攔截器個數比較多的時候,可以將多個攔截器放到一個攔截器棧中    

<interceptors>

                   <interceptor>

                            <interceptor-refname="自定義攔截器名" class="自定義攔截器全類路徑"/>

                            <!--攔截器棧-->

<interceptor-stack name="myStack">

<interceptor-refname="自定義攔截器名"/>

                       <interceptor-refname=" defaultStack"/><!--defaultStack這個是不要改變的,默認xml文件中有-->

                      </interceptor-stack>

                   </interceptor>

</interceptors>

<action name="Vote_*" class="com.yc.ssm.action.VoteAction"method="{1}">

         <resultname="view">/view.jsp</result>

         <resultname="default">/404.jsp</result>

                   <--攔截器引用-->

                   <interceptor-refname=" myStack "></interceptor-ref>

</action>

未完待續......


發佈了43 篇原創文章 · 獲贊 18 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章