一. 异常处理的思路
系统中的异常分为两类:
-
编译期异常,通过try...catch捕获异常,从而获取异常信息
-
运行期异常RuntimeException,通过规范代码开发、测试等手动,减少运行时异常的发生
系统开发中处理异常的思路:
注意:实际开发中,大多数的异常都可以直接抛。但是有少数情况,需要try..catch:service层的事务管理。
如果没有使用Spring帮我们管理事务的话,即我们自己处理事务,就必须try..catch
如果使用了Spring帮我们管理事务的话,异常也要抛。Spring会捕获异常,然后会回滚事务
一旦SSM框架整合完成,几乎所有的异常都只要抛出就行
-
dao异常通常抛给Service
-
Service异常通常抛给Controller
-
Controller把异常抛给前端控制器(SpringMVC框架)
-
由前端控制器把异常交给异常处理器进行处理
二.介绍两种处理方式
1.处理方案一:
1.1创建一个Java类,实现HandlerExceptionResolver接口,重写接口的方法,处理异常
public class MyExceptionResolver implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
//1.打印异常的堆栈信息
ex.printStackTrace();
//2.跳转到错误页面
ModelAndView mav = new ModelAndView();
mav.setViewName("error");
return mav;
}
1.2把这个类配置到xml里,注册bean对象
<!--配置异常处理器-->
<bean class="处理器的全限定类名"/>
2.处理方案二:
2.1创建一个普通类(不用实现HandlerExceptionResolver接口),类上加注解@ControllerAdvice
2.2在类里加方法,方法是用于处理异常的。方法上加@ExceptionHandler(异常.class)
@ControllerAdvice
public class MyExceptionAdvice {
@ExceptionHandler(Exception.class)
public String handleException(Exception e){
e.printStackTrace();
return "error";
}
2.3把这个类配置到xml里,注册bean对象