目录
异常处理器
springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑。
1.异常处理思路
系统中异常包括两类:预期异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。
系统的dao、service、controller出现都通过throws Exception向上跑出,最后由springmvc前端控制器交由异常处理器进行异常处理,如下:
2.自定义异常类
为了区别不同的异常,通常根据异常类型进行区分,这里我们创建一个自定义系统异常。
如果controller、service、dao抛出此类异常说明是系统预期处理的异常信息。
public class MyException extends Exception{
//异常信息
private String message;
public MyException(){
super();
}
public MyException(String message){
super();
this.message = message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
3.自定义异常类
/**
* 全局异常处理器
* @author
*
*/
public class CustomerExceptionResolver implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) {
//定义异常信息
String msg;
//判断异常类型
if(ex instanceof MyException){
//如果是自定义异常,读取该异常信息
msg = ex.getMessage();
}else{
//如果是运行时异常,则取错误堆栈,从堆栈中获取异常信息
Writer out = new StringWriter();
PrintWriter s = new PrintWriter(out);
ex.printStackTrace(s);
msg = out.toString();
}
//把错误信息发给相关人员
//返回错误页面
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("msg",msg);
modelAndView.setViewName("error");
return modelAndView;
}
}
4.异常处理器配置
在springmvc.xml中配置:
<!-- 配置异常处理器 -->
<bean class="com.rosinante.springmvc.exception.CustomerExceptionResolver"></bean>
5.错误页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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=UTF-8">
<title>温馨提示</title>
</head>
<body>
${ msg }
</body>
</html>