# SpringMVC攔截器和異常處理機制 ## 概念 SpringMVC攔截器類似於過濾器,用於進行預處理和後處理 將攔截器按照一定順序連接成一條鏈,就是攔截器鏈 ## 攔截器和過濾器區別 執行前執行 @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String param = request.getParameter("param"); if("yes".equals(param)){ // 返回值為false不放行,true放行 return true; } else { request.getRequestDispatcher("/error.js").forward(request,response); return false; } } //在目標方法執行之後,視圖返回之前執行 @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { modelAndView.addObject("name","xiaoming"); } //在整個流程都執行完畢後執行 @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } }
三個方法的執行:在配置文件中依次配置兩個攔截器分別為1和2,則執行順序是:1的 preHandle >2的preHandle>2的postHandle>1的postHandle>2的afterCompletion>1的afterCompletion
SpringMVC異常處理機制
如圖:
異常處理的兩種方式:
- 使用springmvc通過的簡單異常處理器SimpleMappingExceptionResolver
- 使用Spring的異常處理介面HandlerExceptionResolver自定義自己的異常處理器
SimpleMappingExceptionResolver
主要需要進行相應異常與視圖的映射配置
在springmvc的配置文件中:
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<!-- 預設錯誤頁面-->
<property name="defaultErrorView" value="error"/>
<property name="exceptionMappings">
<map>
<entry key="java.lang.ClassCastException" value="error1"/>
<entry key="java.lang.ClassNotFoundException" value="error2"/>
</map>
</property>
</bean>
HandlerExceptionResolver自定義異常處理器
-
創建異常處理器類實現HandlerExceptionResolver
public class MyExceptionResolver implements HandlerExceptionResolver { @Override //參數Exception是異常對象,返回值是你要跳轉的錯誤頁面 public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) { ModelAndView modelAndView = new ModelAndView(); if(e instanceof Exception){ } modelAndView.setViewName("error.jsp"); return modelAndView; } }
-
配置異常處理器
<bean class="com.myspring.domain.MyExceptionResolver"/>
-
編寫異常頁面