欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring中過濾器(Filter)和攔截器(Interceptor)的區(qū)別和聯(lián)系解析

 更新時間:2022年10月27日 08:22:19   作者:hardyzhou  
在我們?nèi)粘5拈_發(fā)中,我們經(jīng)常會用到Filter和Interceptor,這篇文章主要介紹了Spring中過濾器(Filter)和攔截器(Interceptor)的區(qū)別和聯(lián)系?,需要的朋友可以參考下

在我們?nèi)粘5拈_發(fā)中,我們經(jīng)常會用到Filter和Interceptor。有時同一個功能。Filter可以做,Interceptor也可以做。有時就需要考慮使用哪一個比較好。這篇文章主要介紹一下,二者的區(qū)別和聯(lián)系。希望給大家進行選擇的時候,提供一些幫助

Filter 和 Interceptor 的區(qū)別

Filter

過濾器(Filter)是在請求進入Tomcat容器之后,請求進入Servlet之前執(zhí)行。Filter是Servlet規(guī)范規(guī)定的,只能用于web程序中。

Interceptor

攔截器(Interceptor)是在Servlet和Controller控制器之間執(zhí)行。Interceptor是SpringframeWork中規(guī)定的。

  • Interceptor是基于java的反射機制的,而Filter是基于函數(shù)回調(diào)。
  • Interceptor不依賴與servlet容器,F(xiàn)ilter依賴與servlet容器。
  • Interceptor只能對action請求起作用,而Filter則可以對幾乎所有的請求起作用。
  • Interceptor可以訪問action上下文、值棧里的對象,而Filter不能訪問。
  • Interceptor以獲取IOC容器中的各個bean,而過濾器就不行,這點很重要,在攔截器里注入一個service,可以調(diào)用業(yè)務(wù)邏輯。攔截器可以獲取ioc中的service bean實現(xiàn)業(yè)務(wù)邏輯。

Spring MVC中每個控制器中可以定義多個請求處理方法,我們把這種請求處理方法簡稱為Action

Filter的實現(xiàn)

自己的filter需要要實現(xiàn)javax.servlet.Filter.

import javax.servlet.*;
import java.io.IOException;

public class Myfilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("Myfilter init");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("Myfilter doFilter before");
        filterChain.doFilter(servletRequest,servletResponse);
        System.out.println("Myfilter doFilter after");
    }

    @Override
    public void destroy() {
        System.out.println("Myfilter destroy");
    }
}

注冊Filter在web.xml中

<!-- 注冊過濾器 -->
    <filter>
        <filter-name>myfilter</filter-name>
        <filter-class>com.hardy.config.Myfilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>myfilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

Interceptor的實現(xiàn)

自己的Interceptor需要要實現(xiàn)org.springframework.web.servlet.HandlerInterceptor.

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 在攔截點(Controller方法處理之前)執(zhí)行攔截 若返回的是false則中斷執(zhí)行 反之亦然
        System.out.println("MyInterceptor preHandle");
        return HandlerInterceptor.super.preHandle(request, response, handler);
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        // 在處理過程中(Controller方法處理完之后  DispatcherServlet進行視圖的渲染之前)執(zhí)行攔截
        System.out.println("MyInterceptor postHandle");
        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        // 在DispatcherServlet進行視圖的渲染后 返回前進行攔截
        System.out.println("MyInterceptor afterCompletion");
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }
}

注冊Interceptor在spring的配置文件中(application.xml)

    <!-- 配置攔截器 -->
    <mvc:interceptors>
        <mvc:interceptor>
            <!-- 攔截所有的mvc控制器(Controller) -->
            <mvc:mapping path="/**"/>
            <!-- 放行機制 指定對某個頁面不進行攔截 -->
            <!-- 攔截器只對action起作用 因此填入的不是頁面路徑 而是方法 -->
            <mvc:exclude-mapping path="/login"/>
            <!-- 指定使用哪個攔截器 -->
            <bean class="com.hardy.config.MyInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>

到此這篇關(guān)于Spring中過濾器(Filter)和攔截器(Interceptor)的區(qū)別和聯(lián)系的文章就介紹到這了,更多相關(guān)Spring過濾器和攔截器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JProfiler11使用教程之JVM調(diào)優(yōu)問題小結(jié)

    JProfiler11使用教程之JVM調(diào)優(yōu)問題小結(jié)

    這篇文章主要介紹了JProfiler11使用教程之JVM調(diào)優(yōu),本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • java使用lambda表達式對List集合進行操作技巧(JDK1.8)

    java使用lambda表達式對List集合進行操作技巧(JDK1.8)

    這篇文章主要介紹了java使用lambda表達式對List集合進行操作技巧適用jdk1.8,感興趣的朋友跟著小編一起看看實現(xiàn)代碼吧
    2018-06-06
  • Java實現(xiàn)MD5加密算法方法例子

    Java實現(xiàn)MD5加密算法方法例子

    這篇文章主要給大家介紹了關(guān)于Java實現(xiàn)MD5加密算法方法的相關(guān)資料,MD5加密是一種常見的加密方式,我們經(jīng)常用在保存用戶密碼和關(guān)鍵信息上,需要的朋友可以參考下
    2023-10-10
  • springAOP完整實現(xiàn)過程

    springAOP完整實現(xiàn)過程

    當你調(diào)用SimpleService類的doSomething方法時,上述的PerformanceAspect會自動攔截此調(diào)用,并且記錄該方法的執(zhí)行時間,這樣你就完成了一個針對Spring的AOP入門級案例,感興趣的朋友一起看看吧
    2024-02-02
  • Java使用跳轉(zhuǎn)結(jié)構(gòu)實現(xiàn)隊列和棧流程詳解

    Java使用跳轉(zhuǎn)結(jié)構(gòu)實現(xiàn)隊列和棧流程詳解

    這篇文章主要介紹了Java使用跳轉(zhuǎn)結(jié)構(gòu)實現(xiàn)隊列和棧流程,連續(xù)結(jié)構(gòu)和跳轉(zhuǎn)結(jié)構(gòu)是數(shù)據(jù)結(jié)構(gòu)中常見的兩種基本數(shù)據(jù)結(jié)構(gòu),而我們本次的主角棧和隊列都 既可以使用使用跳轉(zhuǎn)結(jié)構(gòu)實現(xiàn)也可以使用連續(xù)結(jié)構(gòu)實現(xiàn)
    2023-04-04
  • druid ParserException類錯誤問題及解決

    druid ParserException類錯誤問題及解決

    這篇文章主要介紹了druid ParserException類錯誤問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java實現(xiàn)經(jīng)典游戲打磚塊游戲的示例代碼

    Java實現(xiàn)經(jīng)典游戲打磚塊游戲的示例代碼

    這篇文章主要介紹了如何利用Java實現(xiàn)經(jīng)典的游戲—打磚塊。玩家操作一根螢?zāi)簧纤降摹鞍糇印?,讓一顆不斷彈來彈去的“球”在撞擊作為過關(guān)目標消去的“磚塊”的途中不會落到螢?zāi)坏紫?。感興趣的小伙伴可以了解一下
    2022-02-02
  • Java8 List集合如何移除滿足條件的元素

    Java8 List集合如何移除滿足條件的元素

    這篇文章主要介紹了Java8 List集合如何移除滿足條件的元素,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • SpringBoot 分布式驗證碼登錄方案示例詳解

    SpringBoot 分布式驗證碼登錄方案示例詳解

    為了防止驗證系統(tǒng)被暴力破解,很多系統(tǒng)都增加了驗證碼效驗,比較常見的就是圖片二維碼,業(yè)內(nèi)比較安全的是短信驗證碼,當然還有一些拼圖驗證碼,加入人工智能的二維碼等等,我們今天的主題就是前后端分離的圖片二維碼登錄方案,感興趣的朋友一起看看吧
    2023-10-10
  • Java超詳細講解排序二叉樹

    Java超詳細講解排序二叉樹

    排序二叉樹的特點是一個父節(jié)點只能有左右兩個子節(jié)點、左節(jié)點的值比父節(jié)點要小、右節(jié)點的值要比父節(jié)點要大,難度并不大,但是得花時間來理解
    2022-06-06

最新評論