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

Java SpringMVC 異常處理SimpleMappingExceptionResolver類詳解

 更新時間:2021年09月11日 10:32:50   作者:寧與頌  
這篇文章主要介紹了SpringMVC 異常處理SimpleMappingExceptionResolver類詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下

Spring3.0 對異常的處理方式總共有兩種:

一種是使用 HandlerExceptionResolver 接口,并且 Spring 已經(jīng)提供默認(rèn)的實(shí)現(xiàn)類 SimpleMappingExceptionResolver。

第二種方法是在 Controller 內(nèi)部實(shí)現(xiàn),靈活性更高。

從目前的調(diào)查結(jié)果來看,這兩種方式不能共存。我們一般在項(xiàng)目中使用第一種方法。

下面分別描述一下這兩種使用方式:

一、基于 HandlerExceptionResolver 接口的方式

使用這種方式只需要實(shí)現(xiàn) resolveException 方法,該方法返回一個 ModelAndView 對象,在方法內(nèi)部對異常的類型進(jìn)行判斷,然后返回合適的 ModelAndView 對象,如果該方法返回了 null,則 Spring 會繼續(xù)尋找其他的實(shí)現(xiàn)了 HandlerExceptionResolver 接口的 Bean。換句話說,Spring 會搜索所有注冊在其環(huán)境中的實(shí)現(xiàn)了 HandlerExceptionResolver 接口的 Bean,逐個執(zhí)行,直到返回了一個 ModelAndView 對象。

public class CustomExceptionHandler implements HandlerExceptionResolver {  
  
    @Override  
    public ModelAndView resolveException(HttpServletRequest request,  
            HttpServletResponse response, Object object, Exception exception) {  
        if(exception instanceof IOException){  
            return new ModelAndView("ioexp");  
        }else if(exception instanceof SQLException){  
            return new ModelAndView("sqlexp");  
        }  
        return null;  
    }  
}

這個類必須聲明到 Spring 配置文件中,或者使用 @Component 標(biāo)簽,讓 Spring 管理它。同時 Spring 也提供默認(rèn)的實(shí)現(xiàn)類 SimpleMappingExceptionResolver,需要使用時只需要使用注入到 Spring 配置文件進(jìn)行聲明即可。自定義實(shí)現(xiàn)類與默認(rèn)的實(shí)現(xiàn)類,可同時使用。

示例如下:

<!-- 自定義的實(shí)現(xiàn)類 --><bean id="exceptionHandler" class="com.enh.test.CustomExceptionHandler"/><!-- 默認(rèn)的實(shí)現(xiàn)類注入 --><bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">  
    <!-- 為所有的異常定義默認(rèn)的異常處理頁面,exceptionMappings未定義的異常使用本默認(rèn)配置 -->  
    <property name="defaultErrorView" value="error"></property>  
    <!-- 定義異常處理頁面用來獲取異常信息的變量名,默認(rèn)名為exception -->  
    <property name="exceptionAttribute" value="ex"></property>  
    <!--     定義需要特殊處理的異常,用類名或完全路徑名作為key,異常頁文件名作為值,    將不同的異常映射到不同的頁面上。   -->  
    <property name="exceptionMappings">  
        <props>  
            <prop key="IOException">error/ioexp</prop>  
            <prop key="java.sql.SQLException">error/sqlexp</prop>  
        </props>  
    </property>  
</bean>

一個典型的異常顯示界面如下:

<html> 
<head><title>Exception!</title></head> 
<body> 
  <% Exception ex = (Exception)request.getAttribute("exception"); %> 
  <H2>Exception: <%= ex.getMessage();%></H2> 
  <P/> 
  <% ex.printStackTrace(new java.io.PrintWriter(out)); %> 
</body> 
</html>

exception 是在 SimpleMappingExceptionResolver 被存放到 request 中的,具體可以查看源代碼。

另外這里配置的異常顯示界面均僅包括主文件名,至于文件路徑和后綴已經(jīng)在 viewResolver 中指定。如果找不到頁面,會根據(jù)錯誤提示再調(diào)整頁面路徑。

二、Controller 內(nèi)部單獨(dú)實(shí)現(xiàn)

該方法需要定義在 Controller 內(nèi)部,然后創(chuàng)建一個方法并用 @ExceptionHandler 注解來修飾用來處理異常,這個方法基本和 @RequestMapping 修飾的方法差不多,只是可以多一個類型為 Exception 的參數(shù),@ExceptionHandler 中可以添加一個或多個異常的類型,如果為空的話則認(rèn)為可以觸發(fā)所有的異常類型錯誤。

@Controller  
public class ExceptionHandlerController {  
      
    @ExceptionHandler(value={IOException.class,SQLException.class})  
    public String exp(Exception ex,HttpServletRequest request) {  
        request.setAttribute("ex", ex);  
        return "/error.jsp";  
    }  
  
}

三、相關(guān)問題

HandlerExceptionResolver 和 web.xml 中配置的 error-page 會有沖突嗎?

web.xml 中配置 error-page 同樣是配置出現(xiàn)錯誤時顯示的頁面:

<error-page>
    <error-code>500</error-code>
    <location>/500.jsp</location>
</error-page>

如果 resolveException 返回了 ModelAndView,會優(yōu)先根據(jù)返回值中的頁面來顯示。不過,resolveException 可以返回 null,此時則展示 web.xml 中的 error-page 的500狀態(tài)碼配置的頁面。

API 文檔中對返回值的解釋:

return a corresponding ModelAndView to forward to, or null for default processing.

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

相關(guān)文章

  • Java使用CompletableFuture實(shí)現(xiàn)異步編程

    Java使用CompletableFuture實(shí)現(xiàn)異步編程

    在現(xiàn)代 Java 開發(fā)中,異步編程是一項(xiàng)重要技能,而 CompletableFuture 是從 Java 8 開始提供的一個功能強(qiáng)大的工具,用于簡化異步任務(wù)的編寫和組合,本文將詳細(xì)介紹 CompletableFuture 的基本使用和一些常見的應(yīng)用場景,需要的朋友可以參考下
    2025-01-01
  • springboot對壓縮請求的處理方法

    springboot對壓縮請求的處理方法

    這篇文章主要介紹了springboot對壓縮請求的處理,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • Spring?JPA之find拓展方法示例詳解

    Spring?JPA之find拓展方法示例詳解

    這篇文章主要為大家介紹了Spring?JPA之find拓展方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Java ThreadPoolExecutor 線程池的使用介紹

    Java ThreadPoolExecutor 線程池的使用介紹

    Executors 是一個Java中的工具類. 提供工廠方法來創(chuàng)建不同類型的線程池,這篇文章主要介紹了Java ThreadPoolExecutor 線程池的使用介紹,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • java代碼規(guī)范之不合理命名與重復(fù)代碼示例詳解

    java代碼規(guī)范之不合理命名與重復(fù)代碼示例詳解

    這篇文章主要為大家介紹了java代碼規(guī)范之不合理命名與重復(fù)代碼示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • java結(jié)合email實(shí)現(xiàn)自動推送功能

    java結(jié)合email實(shí)現(xiàn)自動推送功能

    這篇文章主要介紹了java結(jié)合email實(shí)現(xiàn)自動推送功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • JeecgBoot框架升級至Spring?Boot3的實(shí)戰(zhàn)步驟

    JeecgBoot框架升級至Spring?Boot3的實(shí)戰(zhàn)步驟

    本文主要介紹了JeecgBoot框架升級至Spring?Boot3的實(shí)戰(zhàn)步驟,從?2.7.10升級到3.1.5有以下幾個點(diǎn)需要注意,下面就來詳細(xì)的介紹一下,感興趣的可以了解一下
    2024-04-04
  • Java實(shí)現(xiàn)布隆過濾器的幾種方式總結(jié)

    Java實(shí)現(xiàn)布隆過濾器的幾種方式總結(jié)

    這篇文章給大家總結(jié)了幾種Java實(shí)現(xiàn)布隆過濾器的方式,手動硬編碼實(shí)現(xiàn),引入Guava實(shí)現(xiàn),引入hutool實(shí)現(xiàn),通過redis實(shí)現(xiàn)等幾種方式,文中有詳細(xì)的代碼和圖解,需要的朋友可以參考下
    2023-07-07
  • spring使用WebSocket注入service層失敗問題及解決

    spring使用WebSocket注入service層失敗問題及解決

    這篇文章主要介紹了spring使用WebSocket注入service層失敗問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 淺談Spring的兩種事務(wù)定義方式

    淺談Spring的兩種事務(wù)定義方式

    下面小編就為大家?guī)硪黄獪\談Spring的兩種事務(wù)定義方式。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10

最新評論

临澧县| 重庆市| 东至县| 来安县| 溆浦县| 简阳市| 海城市| 云霄县| 霞浦县| 烟台市| 福海县| 北安市| 房山区| 湖口县| 贵溪市| 南通市| 桐城市| 鸡东县| 吉木萨尔县| 大兴区| 皮山县| 屏东县| 自贡市| 凌云县| 尤溪县| 兴城市| 巧家县| 竹山县| 葫芦岛市| 米泉市| 阿尔山市| 昌吉市| 肇源县| 南澳县| 玉环县| 三台县| 延津县| 千阳县| 灵璧县| 商丘市| 弥渡县|