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

詳解SpringMVC?HandlerInterceptor攔截器的使用與參數(shù)

 更新時(shí)間:2022年01月18日 16:03:25   作者:Java法師  
本文主要介紹了詳解SpringMVC?HandlerInterceptor攔截器的使用與參數(shù),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

攔截器概念:

  • 攔截器( Interceptor)是一種動(dòng)態(tài)攔截方法調(diào)用的機(jī)制,請(qǐng)求處理過程解析
  • 核心原理: AOP思想
  • 攔截器鏈:多個(gè)攔截器按照一定的順序,對(duì)原始被調(diào)用功能進(jìn)行增強(qiáng)

作用:

  • 在指定的方法調(diào)用前后執(zhí)行預(yù)先設(shè)定后的的代碼
  • 阻止原始方法的執(zhí)行

在這里插入圖片描述

攔截器VS過濾器

歸屬不同: 過濾器屬于Servlet技術(shù), 攔截器屬于SpringMVC技術(shù)攔截內(nèi)容不同: 過濾器對(duì)所有訪問進(jìn)行增強(qiáng), 攔截器僅針對(duì)SpringMVC的訪問進(jìn)行增強(qiáng)

在這里插入圖片描述

攔截器執(zhí)行流程:

自定義攔截器開發(fā)過程:

實(shí)現(xiàn)HandlerInterceptor接口

//自定義攔截器需要實(shí)現(xiàn)HandleInterceptor接口
public class MyInterceptor implements HandlerInterceptor {

    //前置處理方法:原始方法之前執(zhí)行
    @Override
    public boolean preHandle(HttpServletRequest request, //請(qǐng)求對(duì)象
                             HttpServletResponse response, //響應(yīng)對(duì)象
                             Object handler)   // 被調(diào)用的處理器對(duì)象,本質(zhì)是一個(gè)方法對(duì)象,對(duì)反射中的Method對(duì)象進(jìn)行了再包裝,對(duì)方法進(jìn)行封裝加強(qiáng),操作原始對(duì)象,
                                       throws Exception {
        System.out.println("前置運(yùn)行");
        //返回值為false將攔截原始處理器的運(yùn)行,也就是是否放行,如果是false后面的代碼不會(huì)運(yùn)行,如果是true就繼續(xù)執(zhí)行下面的代碼
        //如果配置多攔截器,返回值為false將終止當(dāng)前攔截器后面配置的攔截器的運(yùn)行
        return true;
    }


    //后置處理方法:原始方法運(yùn)行后運(yùn)行,如果原始方法被攔截,則不執(zhí)行
    @Override
    public void postHandle(HttpServletRequest request,
                           HttpServletResponse response,
                           Object handler,
                           ModelAndView modelAndView) // 如果處理器執(zhí)行完成具有返回結(jié)果,可以讀取到對(duì)應(yīng)數(shù)據(jù)與頁面信息進(jìn)行調(diào)整
                           throws Exception {
        System.out.println("后置運(yùn)行");
    }


    // 完成處理方法:攔截器最后執(zhí)行的方法,無論原始方法是否執(zhí)行
    @Override
    public void afterCompletion(HttpServletRequest request,
                                HttpServletResponse response,
                                Object handler,
                                Exception ex) // 如果處理器執(zhí)行過程中出現(xiàn)異常對(duì)象,可以針對(duì)異常情況進(jìn)行單獨(dú)處理
                                throws Exception {
        System.out.println("完成運(yùn)行");
    }

    //三個(gè)方法的運(yùn)行順序?yàn)?   preHandle -> postHandle -> afterCompletion
    //如果preHandle返回值為false,三個(gè)方法僅運(yùn)行preHandle
}

攔截器配置項(xiàng):

<mvc:interceptors>
    <!--開啟具體的攔截器的使用,可以配置多個(gè)-->
    <mvc:interceptor>
        <!--設(shè)置攔截器的攔截路徑,支持*通配-->
        <!--/**         表示攔截所有映射-->
        <!--/*          表示攔截所有/開頭的映射-->
        <!--/user/*     表示攔截所有/user/開頭的映射-->
        <!--/user/add*  表示攔截所有/user/開頭,且具體映射名稱以add開頭的映射-->
        <!--/user/*All  表示攔截所有/user/開頭,且具體映射名稱以All結(jié)尾的映射-->
        <mvc:mapping path="/*"/>
        <mvc:mapping path="/**"/>
        <mvc:mapping path="/handleRun*"/>
        <!--設(shè)置攔截排除的路徑,配置/**或/*,達(dá)到快速配置的目的-->
        <mvc:exclude-mapping path="/b*"/>
        <!--指定具體的攔截器類 bean標(biāo)簽(ref標(biāo)簽)只能配置一個(gè)  
        ref:引用bean的 -->
        <bean class="com.itzhuzhu.interceptor.MyInterceptor"/>
    </mvc:interceptor>
</mvc:interceptors>

多攔截器配置:

運(yùn)行順序:配置在前,則執(zhí)行在前。

    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/showPage"/>
            <bean class="com.itzhuzhu.interceptor.MyInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>
    
    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/showPage"/>
            <bean class="com.itzhuzhu.interceptor.MyInterceptor2"/>
        </mvc:interceptor>
    </mvc:interceptors>

    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/showPage"/>
            <bean class="com.itzhuzhu.interceptor.MyInterceptor3"/>
        </mvc:interceptor>
    </mvc:interceptors>

多攔截器執(zhí)行順序:

在這里插入圖片描述

責(zé)任鏈模式

責(zé)任鏈模式是一種行為模式

特征:

沿著一條預(yù)先設(shè)定的任務(wù)鏈順序執(zhí)行,每個(gè)節(jié)點(diǎn)具有獨(dú)立的工作任務(wù)

優(yōu)勢(shì):

  • 獨(dú)立性:只關(guān)注當(dāng)前節(jié)點(diǎn)的任務(wù),對(duì)其他任務(wù)直接放行到下一節(jié)點(diǎn)
  • 隔離性:具備鏈?zhǔn)絺鬟f特征,無需知曉整體鏈路結(jié)構(gòu),只需等待請(qǐng)求到達(dá)后進(jìn)行處理即可
  • 靈活性:可以任意修改鏈路結(jié)構(gòu)動(dòng)態(tài)新增或刪減整體鏈路責(zé)任
  • 解耦:將動(dòng)態(tài)任務(wù)與原始任務(wù)解耦

弊端:

  • 鏈路過長(zhǎng)時(shí),處理效率低下
  • 可能存在節(jié)點(diǎn)上的循環(huán)引用現(xiàn)象,造成死循環(huán),導(dǎo)致系統(tǒng)崩潰

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

相關(guān)文章

  • Java語言實(shí)現(xiàn)簡(jiǎn)單FTP軟件 FTP本地文件管理模塊實(shí)現(xiàn)(9)

    Java語言實(shí)現(xiàn)簡(jiǎn)單FTP軟件 FTP本地文件管理模塊實(shí)現(xiàn)(9)

    這篇文章主要為大家詳細(xì)介紹了Java語言實(shí)現(xiàn)簡(jiǎn)單FTP軟件,F(xiàn)TP本地文件管理模塊的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Dubbo服務(wù)校驗(yàn)參數(shù)的解決方案

    Dubbo服務(wù)校驗(yàn)參數(shù)的解決方案

    這篇文章主要介紹了Dubbo服務(wù)如何優(yōu)雅的校驗(yàn)參數(shù),Dubbo框架本身是支持參數(shù)校驗(yàn)的,同時(shí)也是基于JSR303去實(shí)現(xiàn)的,今天通過示例代碼介紹下詳細(xì)實(shí)現(xiàn)過程,需要的朋友可以參考下
    2022-03-03
  • SpringBoot整合MyBatis超詳細(xì)教程

    SpringBoot整合MyBatis超詳細(xì)教程

    這篇文章主要介紹了SpringBoot整合MyBatis超詳細(xì)教程,下面從配置模式、注解模式、混合模式三個(gè)方面進(jìn)行說明MyBatis與SpringBoot的整合,需要的朋友可以參考下
    2021-05-05
  • 基于IDEA中格式化代碼的快捷鍵分享

    基于IDEA中格式化代碼的快捷鍵分享

    這篇文章主要介紹了基于IDEA中格式化代碼的快捷鍵分享,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • 解決Spring導(dǎo)出可以運(yùn)行的jar包問題

    解決Spring導(dǎo)出可以運(yùn)行的jar包問題

    最近需要解決Maven項(xiàng)目導(dǎo)入可執(zhí)行的jar包的問題,如果項(xiàng)目不包含Spring,那么使用mvn assembly:assembly即可,這篇文章主要介紹了Spring導(dǎo)出可以運(yùn)行的jar包,需要的朋友可以參考下
    2023-03-03
  • JAVA Iterator 轉(zhuǎn)成 List 的操作

    JAVA Iterator 轉(zhuǎn)成 List 的操作

    這篇文章主要介紹了JAVA Iterator 轉(zhuǎn)成 List 的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Spring事務(wù)的開啟原理詳解

    Spring事務(wù)的開啟原理詳解

    這篇文章主要介紹了Spring事務(wù)的簡(jiǎn)單實(shí)現(xiàn)步驟,幫助大家更好的理解和學(xué)習(xí)使用spring,感興趣的朋友可以了解下
    2021-03-03
  • springboot項(xiàng)目中后端接收前端傳參的方法示例詳解

    springboot項(xiàng)目中后端接收前端傳參的方法示例詳解

    這篇文章主要介紹了springboot項(xiàng)目中一些后端接收前端傳參的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06
  • Java?LockSupport常用方法的源碼分析

    Java?LockSupport常用方法的源碼分析

    這篇文章主要為大家詳細(xì)介紹了Java?LockSupport類中的方法和部分源碼,以及面試常問到的一個(gè)小問題,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-02-02
  • Mybatis使用Collection屬性的示例代碼

    Mybatis使用Collection屬性的示例代碼

    本文主要介紹了Mybatis使用Collection屬性的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07

最新評(píng)論