1.创建一个普通类,实现HandlerExceptionResolver
接口
@Component
public class MyHandlerExceptionResolver implements HandlerExceptionResolver {
/*
捕获并处理异常信息
请求:
request
response
handler: 用户具体调用处理的某个方法
ex:具体的异常信息
*/
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
ModelAndView modelAndView = new ModelAndView();
// 将错误信息,写入到日志中
modelAndView.addObject("error", "sorry,服务器繁忙,请稍后重试~~~");
modelAndView.setViewName("forward:/WEB-INF/error.jsp");
return modelAndView;
}
}
2.## @ControllerAdvice【推荐】
配合
@ExceptionHandler
注解结合使用,当异常抛到controller层时,可以对异常进行统一的处理
@ControllerAdvice
public class MyControllerAdvice {
/**
* @param e 表示异常类型
* @param model 表示响应的信息对象(request域)
* @return
*/
@ExceptionHandler(NullPointerException.class) //专门捕获空指针异常
public String handlerNullPointException(NullPointerException e, Model model){
model.addAttribute("message", "空指针异常");
return "forward:/WEB-INF/error.jsp";
}
/**
* @param e 表示异常类型
* @param model 表示响应的信息对象(request域)
* @return
*/
@ExceptionHandler(NumberFormatException.class) //专门捕获数值类型转换异常
public String handlerNumberFormatException(NumberFormatException e, Model model){
model.addAttribute("message", "数值类型转换异常");
return "forward:/WEB-INF/error.jsp";
}
/**
* @param e 表示异常类型
* @param model 表示响应的信息对象(request域)
* @return
*/
@ExceptionHandler(Exception.class) //捕获所有异常
public String handlerException(Exception e, Model model){
System.out.println(e.getMessage());
e.printStackTrace();
model.addAttribute("message", "服务器繁忙。。。");
return "forward:/WEB-INF/error.jsp";
}
}
3.在web.xml配置当错误代码为404时候自动调转到特定页面
<error-page>
<error-code>404</error-code>
<location>/error.jsp</location>
</error-page>