攔截器,攔截器棧總結
尊重原創 傳送門先行: http://blog.csdn.net/yjsuge/article/details/6661391
攔截器(Interceptor):攔截器是Struts2的核心,Struts2的眾多功能都是通過攔截器來實現的。
攔截器跟filter的概念是非常類似的,攔截器只能攔截Action的,而filter是可以過濾所有的東西的.An interceptor is a stateless class that follows the interceptor pattern, as found inFilter
and
in AOP languages.
Interceptors must be stateless(無狀態的) and not assume that a new instance will be created for each request or Action是單例項的,
攔截器的編寫有兩步,一個是編寫程式碼,第二個是編寫配置檔案.
自定義的攔截器要實現Interceptor介面ActionInvocation的invoke方法就類似於filter的dofilter
配置檔案中用<interceptors>中進行配置.注意攔截器的init方法也是在伺服器一啟動的時候就呼叫的,跟filter一樣的.整個struts都是靠這些攔截器所串聯起來的.我們並沒有在action裡面配置也沒問題啊,因為他有個預設的攔截器棧嘛.是通過 <default-interceptor-ref name="defaultStack"/>來指定的.
注意:一旦定義了自己的攔截器,將其配置到action上後,我們需要在action的最後加上預設的攔截器棧:defaultStack。因為自己的會覆蓋預設的.
攔截器也可以跟filter一樣配置param,然後在程式裡面可以把它讀出來.在程式中它用setter方法set進去的.
如:
<interceptor name="theInterceptor1" class="cn.wenping.interceptor.TheInterceptor1">
<param name="test">wenp</param>
</interceptor>
攔截器定義如下:
public class TheInterceptor1 implements Interceptor {
private String test;
public String getTest() {
return test;
}
public void setTest(String test) {
this.test = test;
}
.............
..............
}
定義攔截器時可以直接繼承AbstractInterceptor抽象類(該類實現了Interceptor介面,並且對init和destroy方法進行了空實現),然後實現其抽象方法intercept即可,實際上就是一個介面卡
注意:以上說的過濾Action實際上是過濾他的execute方法,如果要對指定的方法進行攔截用:MethodFilterInterceptor,此即方法過濾攔截器(可以對指定方法進行攔截的攔截器)。
採用的是下面兩種param進行配置
- excludeMethods - method names to be excluded from interceptor processing
- includeMethods - method names to be included in interceptor processing
<interceptor-ref name="theInterceptor3">
<param name="includeMethods">myExecute</param>
</interceptor-ref>
注意:在方法過濾攔截器中,如果既沒有指定includeMethods引數,也沒有指定execludeMethods引數,那麼所有的方法都會被攔截,也就是說所有的方法都被認為是includeMethods的;如果僅僅指定了includeMethods,那麼只會攔截includeMethods中的方法,沒有包含在includeMethods中的方法就不會被攔截。
關於攔截器中的監聽器:
ActionInvocation中的方法:addPreResultListener
PreResultListeners may be registered with anActionInvocation
to
get a callback after theAction
has been executed but before theResult
is
executed.
他起的作用就是:如果你想在Action的方法執行完畢之後在結果返回之前想要做點東西的話就可以用它們.
相關文章
- Spring MVC 中的攔截器的使用“攔截器基本配置” 和 “攔截器高階配置”SpringMVC
- SpringMVC攔截器SpringMVC
- axios 攔截器iOS
- spring攔截器Spring
- axios攔截器iOS
- sql攔截器SQL
- Mybatis 攔截器MyBatis
- MyBatis攔截器MyBatis
- SpringMVC攔截器,設定不攔截的URLSpringMVC
- Mybatis Interceptor 攔截器MyBatis
- spring boot 攔截器Spring Boot
- SpringMVC-攔截器SpringMVC
- gRPC(3):攔截器RPC
- 【SpringMVC】 4.3 攔截器SpringMVC
- SpringBoot攔截器中獲取註解、攔截器中注入ServiceSpring Boot
- Flume內建攔截器與自定義攔截器(程式碼實戰)
- Spring Boot新增攔截器Spring Boot
- SpringBoot 手寫攔截器Spring Boot
- HandlerInterceptor - 自定義攔截器
- 攔截過濾器模式過濾器模式
- mybatis註冊攔截器MyBatis
- 16、threadlocal+攔截器thread
- SpringMVC中的攔截器SpringMVC
- grpc中的攔截器RPC
- Spring 過濾器和攔截器Spring過濾器
- spring mvc攔截器,spring攔截器以及AOP切面的區別和原始碼SpringMVC原始碼
- axios原始碼分析——攔截器iOS原始碼
- C# 12 攔截器 InterceptorsC#
- spring mvc 攔截器的使用SpringMVC
- webwork的攔截器真是好用Web
- Java實現的攔截器Java
- 攔截器的使用問題
- 在springboot中使用攔截器Spring Boot
- 攔截器(Interceptor)與過濾器(Filter)過濾器Filter
- SpringBoot 攔截器、過濾器、監聽器Spring Boot過濾器
- 短視訊直播系統,軟體自帶的攔截器,攔截功能
- Springboot通過攔截器攔截請求資訊收集到日誌Spring Boot
- 瀏覽器攔截開啟新視窗情況總結瀏覽器
- Dubbo自定義日誌攔截器