项目中的异常处理是项目开发中的重要部分,合理的异常处理方案,对于提高项目开发效率,影响较大。
SSM项目中采用如下方案进行异常处理:
1 对于DAO层抛出的sql异常,已经由myBatis包装成了运行时异常,不需要再进行包装
2 对于Service层可能会抛出的检查异常,catch,包装成运行时异常抛出
3 对于在 close 操作中抛出的检查异常,catch,记录日志,不再包装抛出
4 controller层抛出的异常直接声明抛出
5 准备一个500.jsp页面,自定义一个异常处理器(HandlerExceptionResolver),用来捕获所有异常
6 准备一个400.jsp页面,在web.xml中进行配置
7 其它情况
400错误配置
<error-page>
<error-code>404</error-code>
<location>/WEB-INF/jsp/404.jsp</location>
</error-page>
异常处理器
@Component
public class MyHandlerExceptionResolver implements HandlerExceptionResolver {
private static final Logger logger = LogManager.getLogger(MyHandlerExceptionResolver.class);
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
Exception ex) {
logger.error("服务器出错", ex);
//如果是ajax请求,就返回一个json格式的出错提示信息
if (request.getHeader("X-Requested-With") != null) {
try {
response.getWriter().println(JsonUtils.toJson(AjaxResult.errorInstance("服务器出错了")));
} catch (IOException e) {
logger.error("服务器失败时发送错误提示信息失败", e);
}
//返回一个空的ModelAndView表示已经手动生成响应
//return null表示使用默认的处理方式,等于没处理
return new ModelAndView();
} else {
return new ModelAndView("500");
}
}
}