异常分类
异常分类包括可预期的异常和运行时异常,一般开发人员主要关注可预期异常。
可预期异常即在开发中,开发人员可以预料的异常,所以开发人员可以通过定义不同的异常类型,并对其进行管理,根据类型有针对的进行异常处理。
对于运行时异常,应该在系统测试阶段加强测试,将运行时异常测试出来修改bug,从而降低运行时异常的出现概率。如果系统运行时出现运行时异常,一般提示“系统繁忙,,系统出错请与管理员联系。。。”
- 自定义异常类型
步骤:
1.创建一个类,使这个类继承Exception类
2.创建一个成员变量,用于表示异常信息,并提供get、set方法
3.创建构造函数,并将异常信息传递进去
代码实现:
public class CustomException extends Exception {
private static final long serialVersionUID = 1L;
// 定义一个成员变量,用于接收异常信息
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
// 创建一个构造方法
public CustomException(String message) {
super(message);
this.message = message;
}
}
springmvc进行异常处理
springmvc提供的异常处理器接口HandlerExceptionResolver,开发者可以通过自定义异常处理器对系统中异常进行处理。
- 异常处理器:
就是定义一个类,让其去实现HandlerExceptionResolver接口,重写resolveException方法——-此处如果不明白,请继续往下看
- 异常处理流程:
1.异常发生(一般发生在controller、service、dao)—-一般service和dao层的异常都是抛出到controller层进行try…catch处理
2.自定义异常处理器捕获到异常
3.判断异常类型并进行处理
- 异常处理原理:
在dao中预期异常抛给service,service又抛给controller,controller将异常抛给前端控制器,由前端控制器去调用异常处理器执行异常,参考下边的源代码:
自定义异常处理器
- 实现流程
1.创建一个类,实现Handler’ExceptionResolver接口
2.重写resolveException方法
3.判断抛出的异常是否与自定义异常类型一致
4.如果一致,将异常转换为对应的自定义异常类型
5.如果不一致,创建自定义异常,并通过有参构造设置message
6.创建ModelAndView
7.将异常的message设置到session中
8.设置逻辑视图
9.返回ModelAndView
10.在springmvc.xml中配置自定义处理器 - 实现代码
public class CustomExceptionResolver implements HandlerExceptionResolver {
private CustomException customException = null;
/**
* 参数分析: handler:通过url映射找到的处理器的对象 ex:异常对象
*/
@Override
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) {
// 判断异常是否与自定义异常相同instanceof执行以下操作,判断是否为true
//----ex.getPrototypeOf(o) ===CustomException.prototype
if (ex instanceof CustomException) {
// 找到自定义异常类型,将异常转换为自定义异常类型----生名一个成员变量
customException = (CustomException) ex;
} else {
// 没有找到,说明不是预期异常,创建自定义异常并给错误信息赋值
customException = new CustomException("请联系管理员");
}
// 创建ModelAndView对象,将异常信息放入session中
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("message", customException.getMessage());
// 设置跳转逻辑视图
modelAndView.setViewName("error");
// 返回ModelAndView对象
return modelAndView;
}
}
springmvc.xml中:
<bean class="自定义异常处理器的全路径"></bean>