方式三:编写异常处理器
拦截器和过滤器的区别
- 拦截器:可以在Spring中进行使用
- 过滤器:只能在web.xml中进行配置,也就是只能在web工程中使用
或者我们可以实现一个Spring给我们提供好的接口
@Component
public class HandlerControllerException implements HandlerExceptionResolver {
/**
* @param httpServletRequest
* @param httpServletResponse
* @param o 出现异常的对象
* @param e 出现的异常信息
* @return ModelAndView
*/
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
ModelAndView mv = new ModelAndView();
//将异常信息放入request域中,基本不用
mv.addObject("errorMsg", e.getMessage());
//指定不同异常跳转的页面
if(e instanceof AccessDeniedException){
mv.setViewName("redirect:/403.jsp");
}else {
mv.setViewName("redirect:/500.jsp");
}
return mv;
}
}
下面一个更简单的方式,通过注解就相当于我们实现了 HandlerExceptionResolver
@ControllerAdvice
public class HandlerControllerAdvice{
@ExceptionHandler(AccessDeniedException.class)
public String handlerException(){
return "redirect:/403.jsp";
}
@ExceptionHandler(RuntimeException.class)
public String runtimeHandlerException(){
return "redirect:/500.jsp";
}
}