SpringMVC異常的處理機制
處理流程圖
其本質還是把異常交給SpringMVC框架來處理
系統的dao、service、controller出現異常都通過throws Exception向上丟擲,最後由springmvc前端控制器交由異常處理器進行異常處理。springmvc提供全域性異常處理器(一個系統只有一個異常處理器)進行統一異常處理。
1.異常處理的兩種方式
1.使用Spring MVC提供的簡單異常處理器SimpleMappingExceptionResolver
2.實現Spring的異常處理介面HandlerExceptionResolver 自定義自己的異常處理器
1.使用Spring MVC提供的簡單異常處理器SimpleMappingExceptionResolver
處理邏輯:使用Spring MVC提供的簡單異常處理器SimpleMappingExceptionResolver,處理器實現HandlerExceptionResolver 介面,全域性異常處理器需要實現該介面
SimpleMappingExceptionResolver:就是通過簡單的對映關係來決定由哪個檢視,來處理當前的錯誤資訊。
SimpleMappingExceptionResolver:提供通過異常型別exceptionMappings,來進行異常與檢視之間的對映關係,提供在發生異常時,通過statusCodes來對映異常返回的檢視名稱和對應的HttpServletResponse的返回碼。而且可以通過defaultErrorView和defaultErrorCode來指定預設值,defaultErrorView表示當沒有在exceptionMappings裡面找到對應的異常型別時,就返回defaultErrorView定義的檢視,defaultErrorCode表示在發生異常時,當沒有在檢視與返回碼的對映關係statusCodes裡面找到對應的對映時,預設返回的返回碼。
在使用SimpleMappingExceptionResolver時,當發生異常的時候,SimpleMappingExceptionResolver將會把當前的異常物件放到自身屬性exceptionAttribute中,當沒有指定exceptionAttribute時,exceptionAttribute就是用預設值exception
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<!--預設錯誤檢視-->
<!--即找不到預設的錯誤型別的時候就預設使用這個-->
<property name="defaultErrorView" value="defaulterror"/>
<!--具體型別報錯的錯誤檢視-->
<property name="exceptionMappings">
<map>
<entry key="java.lang.ClassCastException" value="ClassCastException"/>
</map>
</property>
</bean>
2.實現Spring的異常處理介面HandlerExceptionResolver 自定義自己的異常處理器
2.1實現HandlerExceptionResolver
package com.pjh.Myexception;
import com.sun.org.apache.bcel.internal.generic.MONITORENTER;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyexceptionResolver implements HandlerExceptionResolver {
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
ModelAndView modelAndView = new ModelAndView();
if (e instanceof MyEcxeption){
//對於自定義異常的操作
}else{
//對於非自定義異常的操作
}
return modelAndView;
}
}
2.2在配置檔案中配置
<bean class="com.pjh.Myexception.MyexceptionResolver"/>