当使用ssm框架构建系统时,可以构建一个全局异常处理器,它是SpingMVC定义的一个异常处理器,一个系统中只能配置一个。
使用方法:
自定义一个异常处理类,需要实现一个接口HandlerExceptionResolver,并实现里面的resolveException方法,最后,需要在spingMVC配置文件中对这个异常处理类进行配置,将这个类加载到spring容器中。
在编码过程中,如果dao层出现了异常,可以直接抛向service,再从service层抛往controller层,在controller层出现异常之后,程序会自动进入到异常处理类里面的resolveException方法,在这个方法中,可以进行相关的处理,如:将错误信息使用log4j输出到日志文件,跳转到一个有好的异常页面等。
自定义异常类:
/**
* 全局异常处理器
*
* @author Administrator
*/
public class GlobalExceptionReslove implements HandlerExceptionResolver {
//获取log4j的对象
private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionReslove.class);
@Override
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object object, Exception ex) {
//控制台输出错误信息
ex.printStackTrace();
//写入日志文件
logger.error("系统发生异常", ex);
//这里可以将异常信息发送邮件或者发送短信给相关处理人
//展示友好的错误页面
ModelAndView mv = new ModelAndView();
mv.addObject("message", "系统发生异常,请稍后重试...");
mv.setViewName("error/exception");
return mv;
}
}
SpringMVC配置文件的配置:
<!-- 配置全局异常处理器 -->
<bean class="cn.dss.exception.GlobalExceptionReslove"/>
这里使用了log4j来对日志进行处理,它的使用方法时:
1.需要在src/main/resources下面创建一个log4j.properties文件,一定要是在这个目录下,使用这个文件名,这样log4j能自动加载这个配置文件
2.log4j.properties的内容
log4j.rootLogger=INFO,A3,STDOUT
log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout
log4j.appender.STDOUT.layout.ConversionPattern=[%p] [%l] %10.10c - %m%n
log4j.appender.A3=org.apache.log4j.RollingFileAppender
log4j.appender.A3.file=logs/server.log
log4j.appender.A3.MaxFileSize=1024KB
log4j.appender.A3.MaxBackupIndex=10
log4j.appender.A3.layout=org.apache.log4j.PatternLayout
log4j.appender.A3.layout.ConversionPattern=\n\n[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS} method\:%l%n%m%n
3.加入相关的依赖
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.4</version>
</dependency>