2017.3.31 spring mvc教程(四)全局的异常处理

时间:2023-03-08 16:24:49

学习的博客:http://elf8848.iteye.com/blog/875830/

我项目中所用的版本:4.2.0。博客的时间比较早,11年的,学习的是Spring3 MVC。不知道版本上有没有变化比较大的功能。

spring mvc教程(四)全局的异常处理

1.SimpleMappingExceptionResolver

 SimpleMappingExceptionResolver 的父类 : AbstractHandlerExceptionResolver
通过SimpleMappingExceptionResolver,将不同的异常映射到不同的jsp页(通过exceptionMappings属性的配置)。
如果所抛出的异常在exceptionMappings中没有对应的映射,则Spring将显示默认异常页。 通过defaultErrorView属性,配置默认异常页。
也可以自己实现HandlerExceptionResolver接口,用来处理异常。

注意:这里配置的异常显示界面均仅包括主文件名,至于文件路径和后缀已经在viewResolver中指定。如/error/error表示/error/error.js。

 <!-- 总错误处理-->
<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="defaultErrorView">
<value>/error/error</value>
</property>
<property name="defaultStatusCode">
<value>500</value>
</property>
  <property name="warnLogCategory">
<value>org.springframework.web.servlet.handler.SimpleMappingExceptionResolver</value>
</property>
</bean>

显示错误的jsp文件

"exception"是key,在SimpleMappingExceptionResolver类中默认指定的。可以通过配置文件修改这个值。

 <%@ page language="java" contentType="text/html; charset=GBK"
pageEncoding="GBK"%>
<%@ page import="java.lang.Exception"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>错误页面</title>
</head>
<body>
<h1>出错了</h1>
<%
Exception e = (Exception)request.getAttribute("exception");
out.print(e.getMessage());
%>
</body>
</html>

2.将全局异常记录到日志中

(1)warnLogCategory属性

 <property name="warnLogCategory">           
<value>org.springframework.web.servlet.handler.SimpleMappingExceptionResolver</value>
</property>

(2)log4j的配置文件

加入(全限定名):log4j.logger.org.springframework.web.servlet.handler.SimpleMappingExceptionResolver=WARN。这样即使log4j的根日志级别是ERROR,也一定会被收录。