作用
SimpleMappingExceptionHandler对所有异常进行统一处理,将异常类名映射为视图名。
配置方法
在Spring MVC配置文件(我的文件名是dispatcher-servlet.xml)添加如下代码:
<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="exceptionMappings"> <props> <prop key="java.lang.RuntimeException">exception-view-name</prop> </props> </property> </bean>
这样,所有的java.lang.RuntimeException异常都会被SimpleMappingExceptionHandler拦截处理,然后跳转到exception-view-name对应的页面。
处理异常的方法
doResolveException(...)
protected ModelAndView doResolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { // 得到异常所对应的视图的名称 String viewName = determineViewName(ex, request); if (viewName != null) { // Apply HTTP status code for error views, if specified. // Only apply it if we're processing a top-level request. Integer statusCode = determineStatusCode(request, viewName); if (statusCode != null) { applyStatusCodeIfPossible(request, response, statusCode); } return getModelAndView(viewName, ex, request); } else { return null; } }
getModelAndView(...)
protected ModelAndView getModelAndView(String viewName, Exception ex) { ModelAndView mv = new ModelAndView(viewName); //如果没有在配置文件中配置,exceptionAttribute默认值为exception if (this.exceptionAttribute != null) { if (logger.isDebugEnabled()) { logger.debug("Exposing Exception as model attribute '" + this.exceptionAttribute + "'"); } mv.addObject(this.exceptionAttribute, ex); } return mv; }
获取异常
在页面获取异常信息${ exception }