JavaWeb學習筆記—Interceptor

來源:互聯網
上載者:User

標籤:上下文   col   src   lan   pos   reg   article   test   exe   

1.概念

java裡的攔截器是動態攔截Action調用的對象,它提供了一種機制可以使開發人員在一個Action執行的前後執行一段代碼,也可以在一個Action執行前阻止其執行,同時也提供了一種可以提取Action中可重用部分代碼的方式。在AOP中,攔截器用於在某個方法或者欄位被訪問之前,進行攔截然後再之前或者之後加入某些操作。

目前,我們需要掌握的主要是Spring的攔截器,Struts2的攔截器不用深究,知道即可。

 

2.攔截器與過濾器區別 
  1. filter基於回呼函數,我們需要實現的filter介面中doFilter方法就是回呼函數,而interceptor則基於java本身的反射機制,這是兩者最本質的區別
  2. 過濾器依賴與servlet容器,而攔截器不依賴與servlet容器
  3. Filter的過濾範圍比Interceptor大,Filter除了過濾請求外通過萬用字元可以保護頁面,圖片,檔案等等,而Interceptor只能過濾請求。
  4. 攔截器可以訪問action上下文、值棧裡的對象,而過濾器不能
  5. 在action的生命週期中,攔截器可以多次被調用,而過濾器只能在容器初始化時被調用一次

 

3.Spring攔截器

spring中攔截器主要分兩種,一個是HandlerInterceptor,一個是MethodInterceptor。

3.1 HandlerInterceptor
public interface HandlerInterceptor {    boolean preHandle(HttpServletRequest var1, HttpServletResponse var2, Object var3) throws Exception;    void postHandle(HttpServletRequest var1, HttpServletResponse var2, Object var3, ModelAndView var4) throws Exception;    void afterCompletion(HttpServletRequest var1, HttpServletResponse var2, Object var3, Exception var4) throws Exception;}

HandlerInterceptor是springMVC項目中的攔截器,它攔截的目標是請求的地址,比MethodInterceptor先執行。

使用HandlerInterceptor步驟:

  1. 實現一個HandlerInterceptor攔截器可以直接實現HandlerInterceptor介面,也可以繼承HandlerInterceptorAdapter類。
  2. 在springMVC設定檔中配置攔截器

代碼執行個體:

public class HandlerInterceptorDemo implements HandlerInterceptor {    @Override    public boolean preHandle(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse, Object o) throws Exception {        System.out.println("--------HandlerInterceptor.preHandle---------");        return true;    }    @Override    public void postHandle(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {        System.out.println("--------HandlerInterceptor.postHandle---------");    }    @Override    public void afterCompletion(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {        System.out.println("--------HandlerInterceptor.afterCompletion---------");    }}
<mvc:interceptors>        <!-- 在這裡配置攔截器將對所有請求都攔截,公用攔截器可以有多個 -->        <mvc:interceptor>            <!-- 對/test進行攔截 -->            <mvc:mapping path="/test"/>            <!-- 特定請求的攔截器只能有一個 -->            <bean class="com.xzh.HandlerInterceptorDemo" />        </mvc:interceptor>    </mvc:interceptors>

測試結果:

 

3.2 MethodInterceptor
public interface MethodInterceptor extends Interceptor {    Object invoke(MethodInvocation var1) throws Throwable;}

MethodInterceptor是AOP項目中的攔截器,它攔截的目標是方法,即使不是controller中的方法。

使用MethodInterceptor步驟:

  1. 實現MethodInterceptor介面,或利用AspectJ的註解
  2. 在spring設定檔中配置

代碼執行個體:

@Componentpublic class MethodInterceptorDemo implements MethodInterceptor {    @Override    public Object invoke(MethodInvocation methodInvocation) throws Throwable {        System.out.println("-------MethodInterceptorDemo.invoke--------");        Method method = methodInvocation.getMethod();        System.out.println("-------method:"+ method.getName() + "-------");        return methodInvocation.proceed();//該方法不調用,則被攔截的方法不會被執行    }}
<aop:config>        <!--切入點-->        <aop:pointcut id="methodPoint" expression="execution(* com.xzh.*Controller.*(..)) "/><!--在該切入點使用自訂攔截器-->        <aop:advisor pointcut-ref="methodPoint" advice-ref="methodInterceptorDemo"/>    </aop:config>

測試結果:

 

 

參考:

Java三大器之攔截器(Interceptor)的實現原理及程式碼範例

談談spring中的攔截器interceptor

spring方法攔截器 MethodInterceptor 配置

 

JavaWeb學習筆記—Interceptor

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.