最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

Filter 和 Interceptor 的區(qū)別

Filter

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

Interceptor

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

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

Spring MVC中每個(gè)控制器中可以定義多個(gè)請(qǐng)求處理方法,我們把這種請(qǐng)求處理方法簡(jiǎn)稱(chēng)為Action

Filter的實(shí)現(xiàn)

自己的filter需要要實(shí)現(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");
    }
}

注冊(cè)Filter在web.xml中

<!-- 注冊(cè)過(guò)濾器 -->
    <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的實(shí)現(xiàn)

自己的Interceptor需要要實(shí)現(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 {
        // 在攔截點(diǎn)(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 {
        // 在處理過(guò)程中(Controller方法處理完之后  DispatcherServlet進(jìn)行視圖的渲染之前)執(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進(jìn)行視圖的渲染后 返回前進(jìn)行攔截
        System.out.println("MyInterceptor afterCompletion");
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }
}

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

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

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

相關(guān)文章

  • MyBatis高級(jí)映射和查詢緩存

    MyBatis高級(jí)映射和查詢緩存

    這篇文章主要介紹了MyBatis高級(jí)映射和查詢緩存的相關(guān)資料,需要的朋友可以參考下
    2016-06-06
  • java由JABXContext注解讀取xml配置文件方式

    java由JABXContext注解讀取xml配置文件方式

    這篇文章主要介紹了java由JABXContext注解讀取xml配置文件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 淺談java線程join方法使用方法

    淺談java線程join方法使用方法

    這篇文章主要介紹了淺談java線程join方法使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • spring boot jar的啟動(dòng)原理解析

    spring boot jar的啟動(dòng)原理解析

    這篇文章主要介紹了 spring boot jar的啟動(dòng)原理分析,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • javac -encoding 用法詳解

    javac -encoding 用法詳解

    當(dāng)我們編輯了一個(gè)Java源文件保存時(shí),是以操作系統(tǒng)默認(rèn)的字符編碼保存的(Windows xp默認(rèn)字符集是GBK)。這篇文章主要介紹了javac -encoding 用法詳解,非常具有實(shí)用價(jià)值。
    2016-12-12
  • idea中cherry pick的用法

    idea中cherry pick的用法

    Cherry-Pick可以將一個(gè)分支的某些commit,合并到另一個(gè)分支,本文給大家分享idea中cherry pick的用法,感興趣的朋友跟隨小編一起看看吧
    2023-08-08
  • 使用mybatis-plus分頁(yè)出現(xiàn)兩個(gè)Limit的問(wèn)題解決

    使用mybatis-plus分頁(yè)出現(xiàn)兩個(gè)Limit的問(wèn)題解決

    在使用MyBatis-Plus進(jìn)行分頁(yè)查詢時(shí),可能會(huì)遇到查詢SQL中出現(xiàn)兩個(gè)limit語(yǔ)句的問(wèn)題,這通常是由于在多個(gè)模塊中重復(fù)引入了MyBatis-Plus的分頁(yè)插件所導(dǎo)致的,下面就來(lái)介紹一下如何解決,感興趣的可以了解一下
    2024-10-10
  • 200行java代碼實(shí)現(xiàn)2048小游戲

    200行java代碼實(shí)現(xiàn)2048小游戲

    這篇文章主要為大家詳細(xì)介紹了200行java代碼實(shí)現(xiàn)2048小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • Java編程中靜態(tài)內(nèi)部類(lèi)與同步類(lèi)的寫(xiě)法示例

    Java編程中靜態(tài)內(nèi)部類(lèi)與同步類(lèi)的寫(xiě)法示例

    這篇文章主要介紹了Java編程中靜態(tài)內(nèi)部類(lèi)與同步類(lèi)的寫(xiě)法示例,用于構(gòu)建靜態(tài)對(duì)象以及實(shí)現(xiàn)線程同步等,需要的朋友可以參考下
    2015-09-09
  • Springboot+Mybatis中typeAliasesPackage正則掃描實(shí)現(xiàn)方式

    Springboot+Mybatis中typeAliasesPackage正則掃描實(shí)現(xiàn)方式

    這篇文章主要介紹了Springboot+Mybatis中typeAliasesPackage正則掃描實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評(píng)論

西城区| 嫩江县| 涿鹿县| 封开县| 朝阳市| 德兴市| 兴安县| 林周县| 历史| 扶沟县| 尼木县| 资中县| 香格里拉县| 宣威市| 西安市| 新晃| 伊吾县| 航空| 侯马市| 沁水县| 盐山县| 林周县| 老河口市| 巴塘县| 上杭县| 龙口市| 平安县| 宜良县| 普定县| 东丽区| 额敏县| 安达市| 兴宁市| 宾阳县| 莲花县| 平度市| 应城市| 通渭县| 武威市| 南川市| 陇川县|