SpringMVC(5)
SpringMVC的异常处理
异常处理流程:
dao ==> service ==> web ==> 前端控制器 ==> 页面
如果不处理异常,那么直接会将异常抛到页面上
解决方法:
在前端控制器中配置异常处理器,进行异常处理
(1)编写自定义异常类,做提示信息的
(2)编写异常处理器
(3)配置异常处理器,用于跳转异常页面
具体代码:
index.jsp
首页:
<a href="user/testException">testException</a>
SysException.java
自定义的异常类:系统异常
public class SysException extends Exception{
// 存储提示信息
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public SysException(String message) {
this.message = message;
}
}
SysExceptionResolver.java
异常处理器类:需要实现HandlerExceptionResolver
接口
public class SysExceptionResolver implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
// 获取到异常对象
SysException e = null;
if (ex instanceof SysException){
e = (SysException) ex;
}else {
e = new SysException("系统正在维护");
}
// 创建ModelAndView对象
ModelAndView mv = new ModelAndView();
mv.addObject("errorMsg", e.getMessage());
mv.setViewName("error");
return mv;
}
}
springmvc.xml
:配置异常处理器,用于跳转异常页面
<bean id="sysExceptionResolver" class="com.Lemon.exception.SysExceptionResolver"/>
UserController
控制器类:
@Controller
@RequestMapping("/user")
public class UserController {
/**
* SpringMVC的异常处理
*/
@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";
}
}
error.jsp
页面:
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${errorMsg}
</body>
</html>
由于在异常处理器类SysExceptionResolver
中创建ModelAndView
对象:
ModelAndView mv = new ModelAndView();
mv.addObject("errorMsg", e.getMessage());
mv.setViewName("error");
当有异常时,SpringMVC会将异常捕获,并把异常存储到ModelAndView
对象中(mv.addObject("errorMsg", e.getMessage());
),同时设置了跳转的视图页面(mv.setViewName("error");
)。
因此出现异常,不会跳转到success.jsp
页面,而是跳转到error.jsp
页面。