Spring 异常处理
配置spring-mvc.xml
配置web.xml
演示
局部异常处理
UserHandler
@Controller //纳入容器
@RequestMapping("/user") //访问路径
public class UserHandler {
@RequestMapping("login")
public String login() {
int i=1/0; //强行制造一个异常
return "hello";
}
@ExceptionHandler //异常时触发本方法
public ModelAndView exceptionHandler(Exception e) { //形参是Exception
ModelAndView model=new ModelAndView();
model.setViewName("error"); //设置视图文件
model.addObject("error", "服务器内部错误,请尝试刷新页面!"); //设置回传数据
return model; //形参是ModelAndView
}
}
当出现异常时,会调用本类种的异常处理器。
error.jsp
<body>
错误页面
<hr>
${error}
</body>
运行结果
全局异常处理
局部异常处理代码在handler内,只处理本类中的异常,而全局异常处理,可以处理所有的异常。
@Component //纳入容器
public class ExceptionHandler implements HandlerExceptionResolver{
@Override
public ModelAndView resolveException(HttpServletRequest req, HttpServletResponse resp, Object handlerBean,Exception exception) {
//和局部使用方法差不多
ModelAndView model=new ModelAndView();
model.setViewName("error");
model.addObject("error", "这是一个全局异常处理!");
return model;
}
}
Request和Response这些参数按需使用。如果Response跳转,返回值填null即可。
运行结果
注意点
1、同时存在局部异常处理和全局异常处理时,会优先匹配局部异常处理。
2、Spring的异常处理只处理抛出的异常,对于404之类的不会处理。
原生Servlet异常跳转
配置web.xml
在web.xml
中添加 error-page标签
<error-page>
<error-code>404</error-code> <!--错误代码-->
<location>/404.html</location> <!--跳转到页面-->
</error-page>
当发生404错误时,跳转到根目录下的404.html页面。
创建一个静态错误页面
404.html
<body>
访问的资源不存在!404!!404!!
</body>
运行结果
dispatcherServlet会拦截对静态资源的访问,如何同时使用原生servlet和Spring异常处理?SpringMVC访问静态资源
一般开发的时候测试完会把异常处理的代码注释掉,因为开发其他功能的时候还要看错误信息呢。