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

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

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

攔截器概念:

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

作用:

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

在這里插入圖片描述

攔截器VS過(guò)濾器

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

在這里插入圖片描述

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

自定義攔截器開(kāi)發(fā)過(guò)程:

實(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ù)與頁(yè)面信息進(jìn)行調(diào)整
                           throws Exception {
        System.out.println("后置運(yùn)行");
    }


    // 完成處理方法:攔截器最后執(zhí)行的方法,無(wú)論原始方法是否執(zhí)行
    @Override
    public void afterCompletion(HttpServletRequest request,
                                HttpServletResponse response,
                                Object handler,
                                Exception ex) // 如果處理器執(zhí)行過(guò)程中出現(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>
    <!--開(kāi)啟具體的攔截器的使用,可以配置多個(gè)-->
    <mvc:interceptor>
        <!--設(shè)置攔截器的攔截路徑,支持*通配-->
        <!--/**         表示攔截所有映射-->
        <!--/*          表示攔截所有/開(kāi)頭的映射-->
        <!--/user/*     表示攔截所有/user/開(kāi)頭的映射-->
        <!--/user/add*  表示攔截所有/user/開(kāi)頭,且具體映射名稱以add開(kāi)頭的映射-->
        <!--/user/*All  表示攔截所有/user/開(kāi)頭,且具體映射名稱以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特征,無(wú)需知曉整體鏈路結(jié)構(gòu),只需等待請(qǐng)求到達(dá)后進(jìn)行處理即可
  • 靈活性:可以任意修改鏈路結(jié)構(gòu)動(dòng)態(tài)新增或刪減整體鏈路責(zé)任
  • 解耦:將動(dòng)態(tài)任務(wù)與原始任務(wù)解耦

弊端:

  • 鏈路過(guò)長(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)文章

  • Spring請(qǐng)求參數(shù)校驗(yàn)功能實(shí)例演示

    Spring請(qǐng)求參數(shù)校驗(yàn)功能實(shí)例演示

    這篇文章主要介紹了Spring請(qǐng)求參數(shù)校驗(yàn)功能實(shí)例演示,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2018-05-05
  • Java Hibernate對(duì)象(瞬時(shí)態(tài),持久態(tài),脫管態(tài))詳解

    Java Hibernate對(duì)象(瞬時(shí)態(tài),持久態(tài),脫管態(tài))詳解

    這篇文章主要介紹了Java Hibernate對(duì)象(瞬時(shí)態(tài),持久態(tài),脫管態(tài))詳解的相關(guān)資料,這里對(duì)Java Hibernate對(duì)象進(jìn)行了介紹及總結(jié),需要的朋友可以參考下
    2016-11-11
  • java中的十個(gè)大類總結(jié)

    java中的十個(gè)大類總結(jié)

    java.lang.string字符串類將是無(wú)可爭(zhēng)議的冠軍在任何一天的普及和不可以否認(rèn)。這是最后一個(gè)類,用來(lái)創(chuàng)建操作不可變字符串字面值
    2013-10-10
  • Mybatis中collection和association的使用區(qū)別詳解

    Mybatis中collection和association的使用區(qū)別詳解

    這篇文章主要介紹了Mybatis中collection和association的使用區(qū)別詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • SpringCloud?Feign超詳細(xì)講解

    SpringCloud?Feign超詳細(xì)講解

    Feign是Netflix公司開(kāi)發(fā)的一個(gè)聲明式的REST調(diào)用客戶端;?Ribbon負(fù)載均衡、?Hystrⅸ服務(wù)熔斷是我們Spring?Cloud中進(jìn)行微服務(wù)開(kāi)發(fā)非?;A(chǔ)的組件,在使用的過(guò)程中我們也發(fā)現(xiàn)它們一般都是同時(shí)出現(xiàn)的,而且配置也都非常相似
    2022-10-10
  • Java實(shí)現(xiàn)簡(jiǎn)易購(gòu)物系統(tǒng)

    Java實(shí)現(xiàn)簡(jiǎn)易購(gòu)物系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)易購(gòu)物系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Springboot實(shí)現(xiàn)Java郵件任務(wù)過(guò)程解析

    Springboot實(shí)現(xiàn)Java郵件任務(wù)過(guò)程解析

    這篇文章主要介紹了Springboot實(shí)現(xiàn)Java郵件任務(wù)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • java?ResourceBundle讀取properties文件方式

    java?ResourceBundle讀取properties文件方式

    這篇文章主要介紹了java?ResourceBundle讀取properties文件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • JDBC連接MySQL數(shù)據(jù)庫(kù)批量插入數(shù)據(jù)過(guò)程詳解

    JDBC連接MySQL數(shù)據(jù)庫(kù)批量插入數(shù)據(jù)過(guò)程詳解

    這篇文章主要介紹了JDBC連接MySQL數(shù)據(jù)庫(kù)批量插入數(shù)據(jù)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 在?Java?中將Object?轉(zhuǎn)換為?Int的四種方法

    在?Java?中將Object?轉(zhuǎn)換為?Int的四種方法

    這篇文章主要介紹了在Java中如何將?Object?轉(zhuǎn)換為Int,本文研究了在?Java中將Object轉(zhuǎn)換為int的四種不同方法,結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05

最新評(píng)論

启东市| 鄱阳县| 德阳市| 西平县| 新邵县| 盐城市| 海盐县| 筠连县| 托里县| 莱西市| 合川市| 民乐县| 阿荣旗| 西丰县| 定南县| 长垣县| 电白县| 海丰县| 宜良县| 晋宁县| 新干县| 青河县| 资源县| 临邑县| 西平县| 客服| 北辰区| 普兰店市| 酉阳| 禄劝| 洱源县| 衡阳县| 成武县| 晋宁县| 旅游| 石嘴山市| 且末县| 商都县| 普兰县| 肃宁县| 茂名市|