学习的博客:http://elf8848.iteye.com/blog/875830/
我项目中所用的版本:4.2.0。博客的时间比较早,11年的,学习的是Spring3 MVC。不知道版本上有没有变化比较大的功能。
spring mvc教程(四)全局的异常处理
1.SimpleMappingExceptionResolver
1 SimpleMappingExceptionResolver 的父类 : AbstractHandlerExceptionResolver 2 通过SimpleMappingExceptionResolver,将不同的异常映射到不同的jsp页(通过exceptionMappings属性的配置)。 3 如果所抛出的异常在exceptionMappings中没有对应的映射,则Spring将显示默认异常页。 通过defaultErrorView属性,配置默认异常页。 4 也可以自己实现HandlerExceptionResolver接口,用来处理异常。
注意:这里配置的异常显示界面均仅包括主文件名,至于文件路径和后缀已经在viewResolver中指定。如/error/error表示/error/error.js。
1 <!-- 总错误处理--> 2 <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> 3 <property name="defaultErrorView"> 4 <value>/error/error</value> 5 </property> 6 <property name="defaultStatusCode"> 7 <value>500</value> 8 </property> 9 <property name="warnLogCategory"> 10 <value>org.springframework.web.servlet.handler.SimpleMappingExceptionResolver</value> 11 </property> 12 </bean>
显示错误的jsp文件:
"exception"是key,在SimpleMappingExceptionResolver类中默认指定的。可以通过配置文件修改这个值。
1 <%@ page language="java" contentType="text/html; charset=GBK" 2 pageEncoding="GBK"%> 3 <%@ page import="java.lang.Exception"%> 4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 5 <html> 6 <head> 7 <meta http-equiv="Content-Type" content="text/html; charset=GBK"> 8 <title>错误页面</title> 9 </head> 10 <body> 11 <h1>出错了</h1> 12 <% 13 Exception e = (Exception)request.getAttribute("exception"); 14 out.print(e.getMessage()); 15 %> 16 </body> 17 </html>
2.将全局异常记录到日志中
(1)warnLogCategory属性
1 <property name="warnLogCategory">
2 <value>org.springframework.web.servlet.handler.SimpleMappingExceptionResolver</value> 3 </property>
(2)log4j的配置文件
加入(全限定名):log4j.logger.org.springframework.web.servlet.handler.SimpleMappingExceptionResolver=WARN。这样即使log4j的根日志级别是ERROR,也一定会被收录。