系统的dao、service、controller出现都通过throws Exception向上抛出,最后由springmvc前端控制器交由异常处理器进行异常处理,如下图:
使用SpringMVC提供的异常处理器的步骤:
(1)书写一个异常处理类实现HandlerExceptionResolver接口
(2)在springmvc.xml文件中配置该异常处理类
(3)当程序抛异常到DispatcherServlet的时候,会自动执行该异常处理类
抛异常可以是程序自己执行抛异常,也可能是通过throw关键字抛自定义异常。
例子:抛自定义异常执行异常处理器
自定义异常:
package club.ityuchao.exception;
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;
}
}
异常处理器书写:
package club.ityuchao.exception;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
public class CustomerExceptionResolver implements HandlerExceptionResolver {
/**
* Object保存的是抛异常的方法的方法声明
*/
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object obj,
Exception e) {
String message = null;
if(e instanceof MyException) {
message = e.getMessage();
} else {
message = e.toString() + e.getMessage();
}
ModelAndView mav = new ModelAndView();
mav.addObject("message", message);
mav.setViewName("message");
return mav;
}
}
spring管理异常处理器:
<!-- 异常处理器 -->
<bean class="club.ityuchao.exception.CustomerExceptionResolver"/>
程序跑异常:
@RequestMapping(value="/updateitem.action")
public String updateItem(Items item, Model model) throws Exception {
ItemService.updateItem(item);
if(true) {
throw new MyException("自定义异常");
}
//int i = 1/0;
return "redirect:/item/itemlist.action";
}
页面显示错误信息:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
${message }
</body>
</html>
RuntimeException:
自定义异常: