9.自帶異常處理和自定義異常處理

Spring MVC處理異常有3種方式:
(1)使用Spring MVC提供的簡單異常處理器SimpleMappingExceptionResolver;
(2)實現Spring的異常處理接口HandlerExceptionResolver 自定義自己的異常處理器;
(3)使用@ExceptionHandler註解實現異常處理;
參考http://www.cnblogs.com/xd502djj/archive/2012/09/24/2700490.html

如下2種,如果2個都設置在配置裏面,第2種會不執行

第一種方式全局捕獲異常
 <!-- 出現異常會跳到這個頁面,總錯誤處理-->
 <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
  <property name="defaultErrorView">
   <value>/error/error</value>
  </property>
  <property name="defaultStatusCode">
   <value>500</value>
  </property>
  <property name="warnLogCategory">
   <value>org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver</value>
  </property>
  <!-- 如果不設置exceptionMappings,就會全局異常捕獲 -->
  <property name="exceptionMappings">
   <props>
    <prop key="java.sql.SQLException">/error/error</prop>
    <prop key="java.lang.RuntimeException">/error/error</prop>
    <prop key="org.springframework.web.multipart.MaxUploadSizeExceededException">/error/error</prop>
   </props>
  </property>
 </bean>
 
 其中/error/error  就是 /error/error.jsp
 你也可以實現HandlerExceptionResolver接口,寫一個自己的異常處理程序
 
 
=====================
第二種方式自定義異常處理類
public class MyExceptionHandler implements HandlerExceptionResolver {

 public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
   Exception ex) {
  Map<String, Object> model = new HashMap<String, Object>();
  model.put("ex", ex);
  
  // 根據不同錯誤轉向不同頁面
  if(ex instanceof BusinessException) {
   return new ModelAndView("error-business", model);
  }else if(ex instanceof ParameterException) {
   return new ModelAndView("error-parameter", model);
  } else {
   return new ModelAndView("error", model);
  }
 }
}
在Spring的配置文件applicationContext.xml中增加以下內容:
Xml代碼 
<bean id="exceptionHandler" class="cn.basttg.core.exception.MyExceptionHandler"/> 
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章