一、基于配置的异常处理
SpringMVC提供了一个处理控制器方法执行过程中所出现的异常的接口:HandlerExceptionResolver
我们进行查看接口:
该方法的返回值为ModelAndView,为SpringMVC里面执行完控制器方法之后统一的一个对象,Model为往请求域共享数据,View为实现页面跳转。向域对象中共享新的数据。
HandlerExceptionResolver接口的实现类有:DefaultHandleExceptionResolver和SimpleMappingExceptionResolver
SpringMVC提供了自定义的异常处理器SimpleMappingExceptionResolver,使用方式:
该接口重写了类DefaultHandleExceptionResolver,并进行调用了doResolveException方法。
我们发现DefaultHandleExceptionResolver继承了AbstractHandlerExceptionResolver,且AbstractHandlerExceptionResolver里面重写了:
且AbstractHandlerExceptionResolver里面重写了doResolveException方法。
而DefaultHandleExceptionResolver继承了AbstractHandlerExceptionResolver,就必须要对当前方法进行重写:
1.1使用xml配置异常处理:
我们在springmvc.xml文件里面进行配置如下所示:
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver" > <property name="exceptionMappings"> <props> <prop key="java.lang.ArithmeticException">error</prop> </props> </property> </bean>
同时我们新创建一个逻辑视图:error.html:
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>错误</title> </head> <body> <h1>error.html</h1> </body> </html>
同时我们在控制层里面的TestController.java进行如下所示:
package com.rgf.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class TestController { @RequestMapping("test/hello") public String testHello(){ System.out.println(1/0); return "success"; } }
同时注掉上一章节所提到的拦截器的配置:
进行点击,出现如下所示:
之后我们继续在springmvc.xml里面配置如下所示:
<bean class="org.springfram