1.异常处理的思路
系统中异常包括两类:预期异常和运行时异常 RuntimeException,前者通过捕获异常从而获取异常信息,
后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。
系统的 dao、service、controller 出现都通过 throws Exception 向上抛出,最后由 springmvc 前端
控制器交由异常处理器进行异常处理,如下图:
2.自定义异常类
public class SysException extends Exception {
private String message;
@Override
public String getMessage() {
return message;
}
public SysException setMessage(String message) {
this.message = message;
return this;
}
//new构造方法必须传字符串
public SysException(String message) {
this.message = message;
}
//new无参构造方法必须传字符串
public SysException(){};
}
3.自定义异常处理器
public class SysExceptionResolver implements HandlerExceptionResolver {
//处理异常业务的逻辑
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
//获取到异常对象
SysException e = null;
if (e instanceof SysException){
e = (SysException)ex;//强转
}else{
e = new SysException("系统维护中(处理异常业务的逻辑:SysExceptionResolver)");
}
ModelAndView mv = new ModelAndView();
mv.addObject("error",e.getMessage());
//跳转到error.jsp页面
mv.setViewName("error");
return mv;
}
}
3 .配置异常处理器
<!--自定义异常处理器配置-->
<bean id="sysExceptionResolver"
class="com.joyTop.exception.SysExceptionResolver"></bean>
4 .前端JSP
<a href="user/testException">testException</a>
5 .controller
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/testException")
public String testException() throws Exception{
System.out.println("testException.......");
//模拟异常
try {
int a = 10/0;
} catch (Exception e) {
e.printStackTrace();
//抛出自定义异常信息
throw new SysException();
return "success";
}
}
6 .执行结果
error.jsp页面
<body>
<h1>错误页面</h1>
${error}
</body>