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

SpringMVC Interceptor攔截器使用教程

 更新時間:2023年01月14日 10:21:51   作者:qq_19286785  
SpringMVC中攔截器(Interceptor)用于對URL請求進(jìn)行前置/后置過濾,Interceptor與Filter用途相似,但實現(xiàn)方式不同。Interceptor底層就是基于Spring AOP 面向切面編程實現(xiàn)

SpringMVC中的攔截器用于攔截控制器方法的執(zhí)行,執(zhí)行在Controller前后,和視圖渲染完成后。如下圖所示:

一、創(chuàng)建攔截器

繼承HandlerInterceptor 接口,并實現(xiàn)其中的方法

public class FirstInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("FirstInterceptor===>preHandle");
        return true;
    }
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("FirstInterceptor===>postHandle");
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("FirstInterceptor===>afterCompletion");
    }
}

SpringMVC中的攔截器有三個抽象方法:

preHandle:控制器方法執(zhí)行之前執(zhí)行preHandle(),其boolean類型的返回值表示是否攔截或放行,返回true為放行,即調(diào)用控制器方法;返回false表示攔截,即不調(diào)用控制器方法 postHandle:控制器方法執(zhí)行之后執(zhí)行postHandle() afterComplation:處理完視圖和模型數(shù)據(jù),渲染視圖完畢之后執(zhí)行afterComplation()

二、Spring配置文件中設(shè)置

    <mvc:interceptors>
        <bean class="com.rzg.interceptor.FirstInterceptor"></bean>
    </mvc:interceptors>

上面的配置等價與下面

    <bean id="firstInterceptor" class="com.rzg.interceptor.FirstInterceptor"></bean>
    <mvc:interceptors>
        <ref bean="firstInterceptor"/>
    </mvc:interceptors>

如果只在mvc:interceptors中配置一個攔截器,那么所有的請求都經(jīng)過攔截器。以上配置的請求結(jié)果如下:

FirstInterceptor===>preHandle
FirstInterceptor===>postHandle
FirstInterceptor===>afterCompletion

如果要對部分控制器進(jìn)行攔截,可以設(shè)置設(shè)置interceptor。以下配置將攔截所有的/*請求,例如/hello 、/abc ,但是不攔截/abc/cde。如果要攔截任意請求,使用/**

<bean id="firstInterceptor" class="com.rzg.interceptor.FirstInterceptor"></bean>
<!--    攔截器的設(shè)置-->
    <mvc:interceptors>
       <mvc:interceptor>
       <!--攔截的請求   -->
           <mvc:mapping path="/*"/>   
           <!-- 在mapping中排除以下攔截路徑-->
           <mvc:exclude-mapping path="/hello2"/>
           <ref bean="firstInterceptor"/>
       </mvc:interceptor>
    </mvc:interceptors>

結(jié)果:

請求/hello FirstInterceptor===>preHandle
FirstInterceptor===>postHandle
FirstInterceptor===>afterCompletion
請求/hello2 不經(jīng)過攔截器

三、設(shè)置多個攔截器

兩個攔截器FirstInterceptor、SecondInterceptor。

配置文件中配置:

    <mvc:interceptors>
       <mvc:interceptor>
           <mvc:mapping path="/**"/>
           <bean class="com.rzg.interceptor.FirstInterceptor"/>
       </mvc:interceptor>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <bean class="com.rzg.interceptor.SecondInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>

請求結(jié)果:

FirstInterceptor===>preHandle
SecondInterceptor===>preHandle
SecondInterceptor===>postHandle
FirstInterceptor===>postHandle
SecondInterceptor===>afterCompletion
FirstInterceptor===>afterCompletion

若每個攔截器的preHandle()都返回true

此時多個攔截器的執(zhí)行順序和攔截器在SpringMVC的配置文件的配置順序有關(guān):

preHandle()會按照配置的順序執(zhí)行,而postHandle()和afterComplation()會按照配置的反序執(zhí)行

若某個攔截器的preHandle()返回了false

preHandle()返回false和它之前的攔截器的preHandle()都會執(zhí)行,postHandle()都不執(zhí)行,返回false的攔截器之前的攔截器的afterComplation()會執(zhí)行

將SecondInterceptor 攔截器 preHandle 中返回 false

public class SecondInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, 	Object handler) throws Exception {
        System.out.println("SecondInterceptor===>preHandle");
    	return false;
    }

測試結(jié)果:

FirstInterceptor===>preHandle
SecondInterceptor===>preHandle
FirstInterceptor===>afterCompletio

到此這篇關(guān)于SpringMVC Interceptor攔截器使用教程的文章就介紹到這了,更多相關(guān)SpringMVC Interceptor內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JDBC中使用Java8的日期LocalDate和LocalDateTime操作mysql、postgresql

    JDBC中使用Java8的日期LocalDate和LocalDateTime操作mysql、postgresql

    這篇文章主要給大家介紹了關(guān)于JDBC中如何使用Java8的日期LocalDate和LocalDateTime的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • java批量導(dǎo)入導(dǎo)出文件的實例分享(兼容xls,xlsx)

    java批量導(dǎo)入導(dǎo)出文件的實例分享(兼容xls,xlsx)

    這篇文章主要給大家介紹了利用java批量導(dǎo)入導(dǎo)出文件的相關(guān)資料,文中給出了詳細(xì)的實例代碼,并且兼容xls,xlsx,對大家具有一定的參考學(xué)習(xí)價值,下面跟著小編一起來看看詳細(xì)的介紹吧。
    2017-06-06
  • Spring中獲取Bean方法上的自定義注解問題解析

    Spring中獲取Bean方法上的自定義注解問題解析

    這篇文章主要介紹了Spring中如何獲取Bean方法上的自定義注解,基本的思路就是通過Spring提供的ApplicationContext#getBeansWithAnnotation+反射來實現(xiàn),需要的朋友可以參考下
    2023-06-06
  • Java編程中的性能優(yōu)化如何實現(xiàn)

    Java編程中的性能優(yōu)化如何實現(xiàn)

    這篇文章主要介紹了Java編程中的性能優(yōu)化如何實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • SpringBoot初始教程之統(tǒng)一異常處理詳解

    SpringBoot初始教程之統(tǒng)一異常處理詳解

    本篇文章主要介紹了SpringBoot初始教程之統(tǒng)一異常處理詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • MybatisPlus中的insert操作詳解

    MybatisPlus中的insert操作詳解

    這篇文章主要介紹了MybatisPlus中的insert操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • java讀取圖片并轉(zhuǎn)化為二進(jìn)制字符串的實現(xiàn)方法

    java讀取圖片并轉(zhuǎn)化為二進(jìn)制字符串的實現(xiàn)方法

    這篇文章主要介紹了java讀取圖片并轉(zhuǎn)化為二進(jìn)制字符串的實例代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-09-09
  • 淺談Spring IoC容器的依賴注入原理

    淺談Spring IoC容器的依賴注入原理

    這篇文章主要介紹了淺談Spring IoC容器的依賴注入原理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • Rxjava+Retrofit+MVP實現(xiàn)購物車功能

    Rxjava+Retrofit+MVP實現(xiàn)購物車功能

    這篇文章主要為大家詳細(xì)介紹了Rxjava+Retrofit+MVP實現(xiàn)購物車功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • 解決IDEA Gradle構(gòu)建報錯''Cause: zip END header not found''

    解決IDEA Gradle構(gòu)建報錯''Cause: zip END header not found''

    這篇文章主要介紹了解決IDEA Gradle構(gòu)建報錯"Cause: zip END header not found"的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02

最新評論

灵石县| 淄博市| 青冈县| 密云县| 彰武县| 巫溪县| 巢湖市| 怀化市| 张家口市| 达孜县| 渑池县| 安乡县| 娄烦县| 宁蒗| 沭阳县| 集贤县| 凤阳县| 黄陵县| 苗栗县| 柳河县| 上饶县| 商洛市| 麻阳| 天祝| 镇江市| 山阴县| 西安市| 阿瓦提县| 浪卡子县| 巫山县| 凌源市| 富宁县| 黔江区| 忻城县| 九台市| 凉山| 西畴县| 密山市| 农安县| 同德县| 楚雄市|