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

SpringMVC攔截器和異常處理器使用示例超詳細(xì)講解

 更新時(shí)間:2022年09月27日 16:30:12   作者:搗蛋孩學(xué)編程  
攔截器(Interceptor)是一種動(dòng)態(tài)攔截方法調(diào)用的機(jī)制,在SpringMVC中動(dòng)態(tài)攔截控制器方法的執(zhí)行。本文將詳細(xì)講講SpringMVC中攔截器參數(shù)及攔截器鏈配置,感興趣的可以嘗試一下

攔截器

1、攔截器的配置

SpringMVC中的攔截器用于攔截控制器方法的執(zhí)行

SpringMVC中的攔截器需要實(shí)現(xiàn)HandlerInterceptor

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的攔截器必須在SpringMVC的配置文件中進(jìn)行配置:

<!--    配置攔截器-->
    <mvc:interceptors>
<!--        第一種 直接將攔截器類(lèi)添加進(jìn)來(lái)-->
<!--        <bean class="com.Interceptors.FirstInterceptor"/>-->
 
<!--        第二種 先將攔截器類(lèi)注入(在FirstInterceptor類(lèi)添加注解@Component),然后在掃描組件添加,就可以使用-->
<!--        <ref bean="firstInterceptor"/>-->
<!-- 以上兩種配置方式都是對(duì)DispatcherServlet所處理的所有的請(qǐng)求進(jìn)行攔截,不能配置 -->
 
<!--        第三種 可以對(duì)攔截路徑配置-->
        <mvc:interceptor>
<!--            需要攔截的路徑-->
            <mvc:mapping path="/**"/>
            
<!--            不攔截的路徑-->
            <mvc:exclude-mapping path="/"/>
            <ref bean="firstInterceptor"/>
        </mvc:interceptor>
 
    </mvc:interceptors>
<!-- 
    以上配置方式可以通過(guò)ref或bean標(biāo)簽設(shè)置攔截器,通過(guò)mvc:mapping設(shè)置需要攔截的請(qǐng)求,通過(guò)mvc:exclude-mapping設(shè)置需要排除的請(qǐng)求,即不需要攔截的請(qǐng)求
-->

2、攔截器的三個(gè)抽象方法

SpringMVC中的攔截器有三個(gè)抽象方法:

preHandle:控制器方法執(zhí)行之前執(zhí)行preHandle(),其boolean類(lèi)型的返回值表示是否攔截或放行,返回true為放行,即調(diào)用控制器方法;返回false表示攔截,即不調(diào)用控制器方法

postHandle:控制器方法執(zhí)行之后執(zhí)行postHandle()

afterComplation:處理完視圖和模型數(shù)據(jù),渲染視圖完畢之后執(zhí)行afterComplation()

3、多個(gè)攔截器的執(zhí)行順序

a>若每個(gè)攔截器的preHandle()都返回true

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

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

b>若某個(gè)攔截器的preHandle()返回了false

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

異常處理器

1、基于配置的異常處理

SpringMVC提供了一個(gè)處理控制器方法執(zhí)行過(guò)程中所出現(xiàn)的異常的接口:HandlerExceptionResolver

HandlerExceptionResolver接口的實(shí)現(xiàn)類(lèi)有:DefaultHandlerExceptionResolver和SimpleMappingExceptionResolver

SpringMVC提供了自定義的異常處理器SimpleMappingExceptionResolver,使用方式:

<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    <property name="exceptionMappings">
        <props>
        	<!--
        		properties的鍵表示處理器方法執(zhí)行過(guò)程中出現(xiàn)的異常
        		properties的值表示若出現(xiàn)指定異常時(shí),設(shè)置一個(gè)新的視圖名稱(chēng),跳轉(zhuǎn)到指定頁(yè)面
        	-->
            <prop key="java.lang.ArithmeticException">error</prop>
        </props>
    </property>
    <!--
    	exceptionAttribute屬性設(shè)置一個(gè)屬性名,將出現(xiàn)的異常信息在請(qǐng)求域中進(jìn)行共享
        設(shè)置異常信息保存在共享域中的鍵,默認(rèn)保存在請(qǐng)求域,value為異常保存的鍵
    -->
    <property name="exceptionAttribute" value="exception"></property>
</bean>

2、基于注解的異常處理

//@ControllerAdvice將當(dāng)前類(lèi)標(biāo)識(shí)為異常處理的組件
@ControllerAdvice
public class ExceptionController {
    //@ExceptionHandler用于設(shè)置所標(biāo)識(shí)方法處理的異常
    @ExceptionHandler(ArithmeticException.class)
    //ex表示當(dāng)前請(qǐng)求處理中出現(xiàn)的異常對(duì)象
    public String handleArithmeticException(Exception exception, Model model){
        model.addAttribute("exception", exception);
        return "error";
    }
}

到此這篇關(guān)于SpringMVC攔截器和異常處理器使用示例超詳細(xì)講解的文章就介紹到這了,更多相關(guān)SpringMVC攔截器和異常處理器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • IntelliJ IDEA進(jìn)行中文漢化的詳細(xì)教程(附圖文講解)

    IntelliJ IDEA進(jìn)行中文漢化的詳細(xì)教程(附圖文講解)

    今天為大家?guī)?lái)的是 IntelliJ IDEA 中文漢化教程以及中文插件包下載教程,經(jīng)常收到小伙伴在后臺(tái)給我留言,問(wèn) IDEA 怎么進(jìn)行中文漢化,因?yàn)楹芏嘈』锇槭莿側(cè)腴T(mén) Java,看到 IDEA 菜單全英文有些不太適應(yīng),需要的朋友可以參考下
    2024-12-12
  • 如何使用java判斷是不是數(shù)字

    如何使用java判斷是不是數(shù)字

    這篇文章主要給大家介紹了關(guān)于如何使用java判斷是不是數(shù)字的相關(guān)資料,判斷一個(gè)字符串是否為數(shù)字是Java開(kāi)發(fā)中很常見(jiàn)的業(yè)務(wù)需求,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • Spring全局異常捕獲不生效問(wèn)題的解決辦法

    Spring全局異常捕獲不生效問(wèn)題的解決辦法

    Spring項(xiàng)目全局異常處理不生效,登錄接口報(bào)錯(cuò)異常信息被直接返回到接口響應(yīng)中,本文給大家介紹了Spring全局異常捕獲不生效問(wèn)題的解決辦法,文中有詳細(xì)的圖文介紹,需要的朋友可以參考下
    2024-04-04
  • JAVA StringBuffer類(lèi)與StringTokenizer類(lèi)代碼解析

    JAVA StringBuffer類(lèi)與StringTokenizer類(lèi)代碼解析

    這篇文章主要介紹了JAVA StringBuffer類(lèi)與StringTokenizer類(lèi)代碼解析,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • SpringBoot+Shiro學(xué)習(xí)之密碼加密和登錄失敗次數(shù)限制示例

    SpringBoot+Shiro學(xué)習(xí)之密碼加密和登錄失敗次數(shù)限制示例

    本篇文章主要介紹了SpringBoot+Shiro學(xué)習(xí)之密碼加密和登錄失敗次數(shù)限制示例,可以限制登陸次數(shù),有興趣的同學(xué)可以了解一下。
    2017-03-03
  • Java?Web關(guān)鍵字填空示例詳解

    Java?Web關(guān)鍵字填空示例詳解

    最近在工作中使用了java?web,發(fā)現(xiàn)有些難度,下面這篇文章主要給大家介紹了關(guān)于Java?Web關(guān)鍵字填空的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • SpringBoot根據(jù)目錄結(jié)構(gòu)自動(dòng)配置Url前綴方式

    SpringBoot根據(jù)目錄結(jié)構(gòu)自動(dòng)配置Url前綴方式

    這篇文章主要介紹了SpringBoot根據(jù)目錄結(jié)構(gòu)自動(dòng)配置Url前綴方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java如何通過(guò)反射獲取Constructor、Field、Method對(duì)象

    Java如何通過(guò)反射獲取Constructor、Field、Method對(duì)象

    反射指的是對(duì)象的反向處理操作,根據(jù)對(duì)象取得對(duì)象的來(lái)源信息,在反射的世界里面,看重的不再是一個(gè)對(duì)象,而是對(duì)象身后的組成,下面這篇文章主要給大家介紹了關(guān)于Java如何通過(guò)反射獲取Constructor、Field、Method對(duì)象的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • SpringBoot整合Shiro兩種方式(總結(jié))

    SpringBoot整合Shiro兩種方式(總結(jié))

    這篇文章主要介紹了SpringBoot整合Shiro兩種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Hibernate基于ThreadLocal管理Session過(guò)程解析

    Hibernate基于ThreadLocal管理Session過(guò)程解析

    這篇文章主要介紹了Hibernate基于ThreadLocal管理Session過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10

最新評(píng)論

咸宁市| 尚志市| 河南省| 定襄县| 涞源县| 和政县| 封丘县| 西华县| 湖南省| 商丘市| 夏邑县| 富宁县| 奇台县| 同德县| 宝清县| 浦县| 澄迈县| 中牟县| 灵宝市| 霍山县| 黄石市| 博客| 井陉县| 西青区| 斗六市| 峡江县| 南平市| 启东市| 农安县| 兴隆县| 和龙市| 漾濞| 临漳县| 玛纳斯县| 濉溪县| 洪洞县| 刚察县| 富阳市| 崇阳县| 华坪县| 睢宁县|