一、异常结构
1.异常由外到内如下:
web服务器处理异常--->web应用里面web.xml处理异常--->Spring框架处理异常---->控制器注释处理异常
--->控制器方法里面try处理异常
二、针对如上图讲解实现方法
1.Tomcat异常处理:在conf/web.xml里面加入错误页面配置信息。(了解)
2.Web应用程序:工程下的web.xml配置错误页面信息:
<error-page> <error-code>404</error-code> <location>/WEB-INF/jsp/404.jsp</location> </error-page> <error-page> <error-code>500</error-code> <location>/WEB-INF/jsp/500.jsp</location> </error-page> <error-page> <exception-type> java.lang.Exception </exception-type> <location>/WEB-INF/jsp/error.jsp</location> </error-page>
3.Spring框架处理异常:
<!-- 异常处理器 --> <bean class= "org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <!-- 这个name属性作用:将异常类型与错误页面进行对应 --> <property name="exceptionMappings"> <props> <!-- 下面这句的意思: error与前面配置的视图处理器配合,找到error.jsp页面 当任何控制器抛出RuntimeException的时候, 就转发到error.jsp的页面上 。 还可以增加其他类型的异常以及对应的jsp页面,就是下面的这句 可以写多个。key里面也可以写自定义异常的完全限定名。--> <prop key="java.lang.RuntimeException"> error </prop> <prop key="java.lang.IndexOutOfBoundsException"> error1 </prop> </props> </property> </bean>
4.控制器注释处理异常:
@ExceptionHandler public String execute( HttpServletRequest req, Exception e) throws Exception { if(e instanceof NullPointerException) { req.setAttribute("msg", "空指针喽!"); return "message";//转发到message页面 } //还可以增加if处理其他类型的异常。。。 throw e;//若该类型异常处理不了,一定抛出! }
5.最里层的try...catch处理异常方式有很多,例如:返回json对象到页面处理异常,重定向主页地址,转发到错误页面,继续向上抛出等等,根据情况处理异常。