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

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

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

攔截器

1、攔截器的配置

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

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

2、攔截器的三個抽象方法

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

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

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

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

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

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

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

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

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

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

異常處理器

1、基于配置的異常處理

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

HandlerExceptionResolver接口的實現(xiàn)類有:DefaultHandlerExceptionResolver和SimpleMappingExceptionResolver

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

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

2、基于注解的異常處理

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

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

相關(guān)文章

  • SpringBoot2.X整合Spring-Cache緩存開發(fā)的實現(xiàn)

    SpringBoot2.X整合Spring-Cache緩存開發(fā)的實現(xiàn)

    本文主要介紹了SpringBoot2.X整合Spring-Cache緩存開發(fā)的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • SpringSecurity實現(xiàn)自定義登錄方式

    SpringSecurity實現(xiàn)自定義登錄方式

    本文介紹自定義登錄流程,包括自定義AuthenticationToken、AuthenticationFilter、AuthenticationProvider以及SecurityConfig配置類,詳細(xì)解析了認(rèn)證流程的實現(xiàn),為開發(fā)人員提供了具體的實施指導(dǎo)和參考
    2024-09-09
  • Spring中集成Groovy的四種方式(小結(jié))

    Spring中集成Groovy的四種方式(小結(jié))

    這篇文章主要介紹了Spring中集成Groovy的四種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • SpringBoot詳解Banner的使用

    SpringBoot詳解Banner的使用

    這篇文章主要介紹了超個性修改SpringBoot項目的啟動banner的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • java可以作為第一門編程語言學(xué)習(xí)嗎

    java可以作為第一門編程語言學(xué)習(xí)嗎

    在本篇內(nèi)容里小編給JAVA零基礎(chǔ)的網(wǎng)友分享一篇關(guān)于java可以作為第一門編程語言學(xué)習(xí)嗎的文章,有興趣的朋友們可以參考下。
    2020-11-11
  • Spring Boot集成ElasticSearch實現(xiàn)搜索引擎的示例

    Spring Boot集成ElasticSearch實現(xiàn)搜索引擎的示例

    這篇文章主要介紹了Spring Boot集成ElasticSearch實現(xiàn)搜索引擎的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • java利用POI讀取excel文件的方法

    java利用POI讀取excel文件的方法

    這篇文章主要介紹了java利用POI讀取excel文件的方法,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-12-12
  • Character.UnicodeBlock中cjk的說明詳解

    Character.UnicodeBlock中cjk的說明詳解

    這篇文章主要為大家詳細(xì)介紹了Character.UnicodeBlock中cjk的說明,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • java命令調(diào)用虛擬機(jī)方法總結(jié)

    java命令調(diào)用虛擬機(jī)方法總結(jié)

    在本篇文章里我們給大家整理了關(guān)于java中的java命令如何調(diào)用虛擬機(jī)的方法和具體步驟,需要的朋友們跟著操作下。
    2019-05-05
  • 基于IO版的用戶登錄注冊實例(Java)

    基于IO版的用戶登錄注冊實例(Java)

    下面小編就為大家?guī)硪黄贗O版的用戶登錄注冊實例(Java)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09

最新評論