对于异常处理,大多使用一个共同的异常类统一处理从dao,service,controller层抛出的异常,将页面跳转到共同的error页面。
public class CommonException implements HandlerExceptionResolver { /** 日志 **/ private Logger logger = LoggerFactory.getLogger(CommonException.class); /** 共同error处理页面 **/ private static final String COMMON_ERROR_PAGE = "/error/error"; /** 共同session超时处理页面 **/ private static final String COMMON_SESSION_PAGE = "/error/session"; /** * 异常类的统一处理 */ @Override public ModelAndView resolveException(HttpServletRequest req, HttpServletResponse resp, Object obj, Exception e) { logger.debug(">>>resolveException(HttpServletRequest req, HttpServletResponse resp, Object obj,Exception e)"); ModelAndView mav = new ModelAndView(); // 默认error处理 mav.addObject("errorMsg", "数据处理异常,请重试或与管理员联系!"); mav.addObject("errorDetailMsg", e.getMessage()); mav.addObject("errorDetailCause", e.getCause()); mav.setViewName(COMMON_ERROR_PAGE); // session超时处理 if(e instanceof SessionException) { mav.addObject("errorMsg", "您因长时未操作会话超时,请点击【确定】,重新登录!"); mav.addObject("errorDetailMsg", (SessionException) e).getMsg()); mav.setViewName(COMMON_SESSION_PAGE); } logger.debug("<<<resolveException(HttpServletRequest req, HttpServletResponse resp, Object obj,Exception e)"); return mav; }
注意需要实现 HandlerExceptionResolver 这个接口。
同时注册bean.
<bean class="com.****.CommonException"></bean>