国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SpringMVC的攔截器和異常處理器

這篇具有很好參考價值的文章主要介紹了SpringMVC的攔截器和異常處理器。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

lerInterceptor 攔截器

1、攔截器的作用

2、攔截器的創(chuàng)建

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

4、攔截器的配置

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

SpringMVC的異常處理器

1、異常處理器概述

2、基于配置文件的異常處理

3、基于注解的異常處理


lerInterceptor 攔截器

1、攔截器的作用

攔截器的作用時機(jī)

SpringMVC的攔截器作用于?控制器方法執(zhí)行的前后

有不同的攔截方法,作用于控制器方法執(zhí)行之前、之后、以及視圖渲染之后三個階段

攔截器與過濾器的區(qū)別

過濾器是原生Serlvet的組件,作用于Servlet執(zhí)行之前

攔截器是SpringMVC的模塊,作用于控制器方法執(zhí)行前、后、渲染視圖后。

2、攔截器的創(chuàng)建

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

示例

public class FirstInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("控制器方法準(zhǔn)備執(zhí)行...");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("控制器方法執(zhí)行完畢...");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("視圖渲染完畢...");
    }
}

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

HandlerInterceptor接口有三個抽象方法:

  • preHandle控制器方法執(zhí)行之前執(zhí)行preHandle(),其boolean類型的返回值表示是否攔截或放行
    • 返回true為放行,即調(diào)用控制器方法
    • 返回false表示攔截,即不調(diào)用控制器方法
  • postHandle控制器方法執(zhí)行之后執(zhí)行postHandle()
  • afterComplation:處理完視圖和模型數(shù)據(jù),渲染視圖完畢之后執(zhí)行afterComplation()

源碼分析,為什么preHandle能實現(xiàn)攔截控制器方法

//DispatherServlet
if (!mappedHandler.applyPreHandle(processedRequest, response)) {
    //如果applyPreHandle方法返回的是false,就直接return,不再執(zhí)行下面的內(nèi)容
    return;
}

//執(zhí)行控制器方法
mv = ha.handle(processedRequest, response, mappedHandler.getHandler());
//渲染視圖
...


//applyPreHandle方法
boolean applyPreHandle(HttpServletRequest request, HttpServletResponse response) throws Exception {
    for (int i = 0; i < this.interceptorList.size(); i++) {
        HandlerInterceptor interceptor = this.interceptorList.get(i);
        if (!interceptor.preHandle(request, response, this.handler)) {
            triggerAfterCompletion(request, response, null);
            //如果當(dāng)前攔截器的preHandle方法返回false,applyPreHandle方法也返回false
            return false;
        }
        this.interceptorIndex = i;
    }
    return true;
}

注意

SpringMVC配置文件中的view-controller視圖控制器標(biāo)簽,也會被攔截器攔截。

4、攔截器的配置

SpringMVC的攔截器必須在SpringMVC的配置文件中進(jìn)行配置。

攔截器有三種配置方式,一般使用第三種,可以配置攔截范圍。

方式一?在interceptors中配置自定義攔截器的bean標(biāo)簽

<!--配置攔截器-->
<mvc:interceptors>
    <bean class="com.csai.interceptors.FirstInterceptor"/>
</mvc:interceptors>

這種方式無法指定攔截范圍,是對DispatcherServlet所處理的所有的請求進(jìn)行攔截

方式二?在interceptors中引用自定義攔截器的bean id

<bean id="firstInterceptor" class="com.csai.interceptors.FirstInterceptor"/>

<!--配置攔截器-->
<mvc:interceptors>
    <ref bean="firstInterceptor"/>
</mvc:interceptors>

和上面一樣,這種方式無法指定攔截范圍,是對DispatcherServlet所處理的所有的請求進(jìn)行攔截

配置自定義攔截器的bean時,可以使用配置文件,也可以使用@Component注解+組件掃描的方式

方式三?使用<mvc:interceptor>標(biāo)簽進(jìn)行配置

<bean id="firstInterceptor" class="com.csai.interceptors.FirstInterceptor"/>

<!--配置攔截器-->
<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/**"/>
        <mvc:exclude-mapping path="/testInterceptor"/>
        <ref bean="firstInterceptor"/>
    </mvc:interceptor>
</mvc:interceptors>

可以配置三個屬性:

  • mapping攔截請求的請求地址,可以使用Ant風(fēng)格的路徑
  • exclude-mapping不會被攔截的請求地址,即攔截白名單
  • bean/ref:指定攔截器的bean

例如這里是攔截所有請求,不攔截testInterceptor頁面,對應(yīng)的攔截器是firstInterceptor

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

如果匹配到的多個攔截器的preHandle()方法都返回true

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

  • preHandle()會按照配置的順序執(zhí)行,即先配置的先執(zhí)行

  • postHandle()和afterComplation()會按照配置的反序執(zhí)行,即先配置的后執(zhí)行,因為是嵌套的關(guān)系。

示例,請求訪問,匹配到一個控制器方法,兩個攔截器:

配置順序:

<!--配置攔截器-->
<mvc:interceptors>
    <ref bean="Interceptor A"/>
    <ref bean="Interceptor B"/>
</mvc:interceptors>

執(zhí)行順序:

preHandle A --> true

preHandle B --> true

--- 控制器方法執(zhí)行 ---

--- 控制器方法執(zhí)行完畢 ---

postHandle B

postHandle A

--- 視圖渲染完畢 ---

afterComplation B

afterComplation A

如果匹配到多個攔截器,有的攔截器的preHandle()方法返回了false

先看結(jié)果:對于同一個控制器方法,只要存在攔截器的preHandle()方法返回了false,控制器方法就不會執(zhí)行。

  • 在它之前配置的攔截器,和它自己的preHandle()都會執(zhí)行
  • 所有的postHandle()都不執(zhí)行,因為控制器方法沒有執(zhí)行
  • 在它之前配置的攔截器,afterComplation()會執(zhí)行
  • 在它之后配置的攔截器,所有方法都不會執(zhí)行。

示例 請求訪問,匹配到一個控制器方法,兩個攔截器,其中一個返回false:

配置順序:

<!--配置攔截器-->
<mvc:interceptors>
    <ref bean="Interceptor A"/>
    <ref bean="Interceptor B"/>
</mvc:interceptors>

Interceptor B 的preHandle()返回false

執(zhí)行順序:

preHandle A --> true

preHandle B --> false

--- 控制器方法不執(zhí)行 ---

afterComplation A

SpringMVC的異常處理器

1、異常處理器概述

異常處理器的作用

用于處理SpringMVC 控制器方法執(zhí)行過程中 產(chǎn)生的異常。

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

HandlerExceptionResolver接口的實現(xiàn)類:

  • DefaultHandlerExceptionResolver,是SpringMVC默認(rèn)使用的異常處理器
  • SimpleMappingExceptionResolver,用于自定義 異常處理器

自定義異常處理器的使用場景

大致有兩個作用:

  1. 對系統(tǒng)異常提供自定義處理。比如出現(xiàn)某個異常時,跳轉(zhuǎn)到服務(wù)器繁忙的頁面,用戶就不會看到500這類的頁面了
  2. 提供對自定義異常的處理方案

2、基于配置文件的異常處理

SpringMVC提供了自定義的異常處理器SimpleMappingExceptionResolver

示例 實現(xiàn)錯誤頁面跳轉(zhuǎn)

<!--配置異常處理器-->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    <property name="exceptionMappings">
        <props>
            <!--如果出現(xiàn)ArithmeticException數(shù)學(xué)異常,就跳轉(zhuǎn)到error視圖-->
            <prop key="java.lang.ArithmeticException">error</prop>
        </props>
    </property>
</bean>

properties的鍵表示處理器方法執(zhí)行過程中出現(xiàn)的異常

properties的值表示若出現(xiàn)指定異常時,設(shè)置一個新的視圖名稱,跳轉(zhuǎn)到指定頁面

測試

error頁面

<h3>服務(wù)器繁忙!</h3>

控制器方法

@RequestMapping("/testInterceptor")
public String testInterceptor(){
    //創(chuàng)造一個數(shù)學(xué)異常
    Integer i = 3/0;
    return "success";
}

發(fā)生異常后,就會被自定義的異常處理器捕獲,跳轉(zhuǎn)到錯誤頁面

示例 實現(xiàn)異常信息的捕獲

配置文件

<!--配置異常處理器-->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    <property name="exceptionMappings">
        <props>
            <!--如果出現(xiàn)ArithmeticException數(shù)學(xué)異常,就跳轉(zhuǎn)到error視圖-->
            <prop key="java.lang.ArithmeticException">error</prop>
        </props>
    </property>
    <property name="exceptionAttribute" value="exception"/>
</bean>

配置exceptionAttribute屬性,設(shè)置一個value

異常信息就會存入request域中,鍵名為設(shè)置的value,值為異常信息。

前端頁面展示錯誤信息

<h3>服務(wù)器繁忙!</h3>
<p th:text="${exception}"></p>

3、基于注解的異常處理

使用注解,實現(xiàn)獲取異常信息和跳轉(zhuǎn)錯誤頁面

@ControllerAdvice
public class ExceptionController {

    @ExceptionHandler(value = {ArithmeticException.class})
    public String testException(Exception exception, Model model){
        model.addAttribute("exception", exception);
        return "error";
    }

}

原理:如果遇到了@ExceptionHandler 注解 標(biāo)識的這些異常,就調(diào)用 此 @ExceptionHandler 注解對應(yīng)的控制器方法。

使用注解,在配置文件中就不需要配置任何關(guān)于異常處理器的內(nèi)容。文章來源地址http://www.zghlxwxcb.cn/news/detail-432480.html

到了這里,關(guān)于SpringMVC的攔截器和異常處理器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【SpringMVC】統(tǒng)一異常處理 前后臺協(xié)議聯(lián)調(diào) 攔截器

    【SpringMVC】統(tǒng)一異常處理 前后臺協(xié)議聯(lián)調(diào) 攔截器

    1. 問題描述 在講解這一部分知識點之前,我們先來演示個效果,修改BookController類的 getById 方法 重新啟動運(yùn)行項目,使用PostMan發(fā)送請求,當(dāng)傳入的id為1,則會出現(xiàn)如下效果: 前端接收到這個信息后和之前我們約定的格式不一致,這個問題該如何解決? 在解決問題之前,我們

    2024年02月11日
    瀏覽(24)
  • 【SpringMVC】統(tǒng)一異常處理 前后臺協(xié)議聯(lián)調(diào) 攔截器(文末贈書)

    【SpringMVC】統(tǒng)一異常處理 前后臺協(xié)議聯(lián)調(diào) 攔截器(文末贈書)

    1. 問題描述 在講解這一部分知識點之前,我們先來演示個效果,修改BookController類的 getById 方法 重新啟動運(yùn)行項目,使用PostMan發(fā)送請求,當(dāng)傳入的id為1,則會出現(xiàn)如下效果: 前端接收到這個信息后和之前我們約定的格式不一致,這個問題該如何解決? 在解決問題之前,我們

    2024年02月09日
    瀏覽(27)
  • SpringMVC之異常處理器

    SpringMVC提供了一個處理控制器方法執(zhí)行過程中所出現(xiàn)的異常的接口:HandlerExceptionResolver。 HandlerExceptionResolver接口的實現(xiàn)類有:DefaultHandlerExceptionResolver(默認(rèn)的)和 SimpleMappingExceptionResolver(自定義的)。 這里配置了兩個異常,出現(xiàn)其中一個異常后跳轉(zhuǎn)到error頁面。 以上就是異

    2024年02月10日
    瀏覽(24)
  • 【AntDesign】封裝全局異常處理-全局?jǐn)r截器

    【AntDesign】封裝全局異常處理-全局?jǐn)r截器

    目錄 場景 1 定義全部異常處理類 2 替換request引用 3 代碼優(yōu)化 總結(jié) 本文前端用的是阿里的Ant-Design框架,其他框架也有全局?jǐn)r截器,思路是相同,具體實現(xiàn)自行百度下吧 因為每次都需要調(diào)接口,都需要單獨處理異常情況(code !=0),因此前端需要對后端返回的通用響應(yīng)進(jìn)行統(tǒng)

    2024年02月08日
    瀏覽(21)
  • 13、SpringMVC之異常處理器

    13、SpringMVC之異常處理器

    創(chuàng)建名為spring_mvc_exception的新module,過程參考9.1節(jié)和9.5節(jié) SpringMVC 提供了一個處理控制器方法執(zhí)行異常的接口:HandlerExceptionResolver HandlerExceptionResolver 接口的實現(xiàn)類有:DefaultHandlerExceptionResolver 和 SimpleMappingExceptionResolver 實際工作中,有時使用 SimpleMappingExceptionResolver 異常解析器

    2024年02月05日
    瀏覽(25)
  • 登錄頁面jwt密鑰,過濾器,攔截器,異常處理

    需求: 用戶未登錄時,訪問其他也沒面,操作添加、刪除等操作時,強(qiáng)行跳轉(zhuǎn)至登錄頁面。 實現(xiàn)方法: 1.使用Cookie,登錄后后端添加一個cookie,每次頁面判斷是否有cookie, 2。使用session,原理同上,只不過session是存儲在服務(wù)器里的,cookie是在瀏覽器里。 3。使用jwt令牌,登

    2023年04月25日
    瀏覽(26)
  • SpringMVC下半篇之異常處理器及日期轉(zhuǎn)換器

    SpringMVC下半篇之異常處理器及日期轉(zhuǎn)換器

    如果不加以異常處理,錯誤信息肯定會拋在瀏覽器頁面上,這樣很不友好,所以必須進(jìn)行異常處理。 系統(tǒng)的dao、service、controller出現(xiàn)都通過throws Exception向上拋出,最后由springmvc前端控制器交由異常處理器進(jìn)行異常處理,如下圖: 編寫controller 在index.jsp里面定義超鏈接 5.2.1.配

    2024年01月19日
    瀏覽(19)
  • 解決攔截器拋出異常處理類的500狀態(tài)碼Html默認(rèn)格式響應(yīng) !

    解決方式 將Java對象轉(zhuǎn)換為JSON格式的響應(yīng),使用spring-mvc.xml配置適當(dāng)?shù)南⑥D(zhuǎn)換器。 問題出處的相關(guān)類如下 interceptor如下 ?自定義異常類 ?異常處理類

    2024年02月09日
    瀏覽(21)
  • 【Spring Boot】攔截器與統(tǒng)一功能處理:統(tǒng)一登錄驗證、統(tǒng)一異常處理與統(tǒng)一數(shù)據(jù)返回格式

    【Spring Boot】攔截器與統(tǒng)一功能處理:統(tǒng)一登錄驗證、統(tǒng)一異常處理與統(tǒng)一數(shù)據(jù)返回格式

    ?Spring AOP是一個基于面向切面編程的框架,用于將橫切性關(guān)注點(如日志記錄、事務(wù)管理)與業(yè)務(wù)邏輯分離,通過代理對象將這些關(guān)注點織入到目標(biāo)對象的方法執(zhí)行前后、拋出異?;蚍祷亟Y(jié)果時等特定位置執(zhí)行,從而提高程序的可復(fù)用性、可維護(hù)性和靈活性。但使用原生Sp

    2024年02月16日
    瀏覽(25)
  • 【SpringMVC】| SpringMVC攔截器

    【SpringMVC】| SpringMVC攔截器

    目錄 一:SpringMVC攔截器 1. 攔截器介紹 2. HandlerInterceptor接口分析 3. 自定義攔截器實現(xiàn)權(quán)限驗證 SpringMVC 中的 Interceptor 攔截器,它的主要作用是攔截指定的用戶請求,并進(jìn)行相應(yīng)的預(yù)處理與后處理。其攔截的時間點在“處理器映射器根據(jù)用戶提交的請求映射出了所要執(zhí)行的處理

    2024年02月06日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包