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

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

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

攔截器概念:

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

作用:

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

在這里插入圖片描述

攔截器VS過濾器

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

在這里插入圖片描述

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

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

實現(xiàn)HandlerInterceptor接口

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

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


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


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

    //三個方法的運行順序為    preHandle -> postHandle -> afterCompletion
    //如果preHandle返回值為false,三個方法僅運行preHandle
}

攔截器配置項:

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

多攔截器配置:

運行順序:配置在前,則執(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í)行順序:

在這里插入圖片描述

責任鏈模式

責任鏈模式是一種行為模式

特征:

沿著一條預先設定的任務鏈順序執(zhí)行,每個節(jié)點具有獨立的工作任務

優(yōu)勢:

  • 獨立性:只關(guān)注當前節(jié)點的任務,對其他任務直接放行到下一節(jié)點
  • 隔離性:具備鏈式傳遞特征,無需知曉整體鏈路結(jié)構(gòu),只需等待請求到達后進行處理即可
  • 靈活性:可以任意修改鏈路結(jié)構(gòu)動態(tài)新增或刪減整體鏈路責任
  • 解耦:將動態(tài)任務與原始任務解耦

弊端:

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

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

相關(guān)文章

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

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

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

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

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

    SpringBoot整合MyBatis超詳細教程

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

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

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

    解決Spring導出可以運行的jar包問題

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

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

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

    Spring事務的開啟原理詳解

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

    springboot項目中后端接收前端傳參的方法示例詳解

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

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

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

    Mybatis使用Collection屬性的示例代碼

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

最新評論