ssm框架之异常处理

异常处理思路

系统中异常包括两类:预期异常和运行时异常runtimeexception,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。

系统的dao、service、controller出现都通过throws Exception向上抛出,最后由springMVC前端控制器交由异常处理器进行异常处理,如下图:

 springMVC提供全局异常处理器进行统一的异常处理,一个系统只有一个异常处理器

1自定义异常类

对不同的异常类型定义异常类,继承Exception

/**
* Created by Alex on 2017/6/29.
* 系统自定义异常类
*/
public class CustomException extends Exception {
//异常信息
  public String message;
  public CustomException(String message){
    super(message);
    this.message = message;
  }

  @Override
  public String getMessage() {
    return message;
  }

  public void setMessage(String message) {
    this.message = message;
  }
}

2配置全局异常处理器

思路:

系统遇到异常时,在程序中手动抛出,dao抛给service,service抛给controller,最后controller抛给前端控制器,前端控制器调用全局异常处理器。

全局异常处理器处理思路:

解析异常类型,若该异常类型是系统自定义的异常,直接取出异常信息在错误页面展示即可。

如果不是系统自定义异常,构造一个系统自定义的异常类型,信息为“未知错误”

springMVC提供一个HandlerExceptionResolver

/**
 * Created by Alex on 2017/6/29.
 * 全局异常处理器
 */
public class CustomExceptionResolver implements HandlerExceptionResolver{
    /**
     * 系统抛出的异常
     * @param httpServletRequest
     * @param httpServletResponse
     * @param o
     * @param e 系统抛出的异常
     * @return
     */
    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
       // 解析出异常类型
        CustomException customException = null;
        // 若该异常类型是系统自定义的异常,直接取出异常信息在错误页面展示即可。
        if(e instanceof CustomException){
            customException = (CustomException)e;
        }else{
            // 如果不是系统自定义异常,构造一个系统自定义的异常类型,信息为“未知错误”
            customException = new CustomException("未知错误");
        }
        //错误信息
        String message = customException.getMessage();
        ModelAndView modelAndView = new ModelAndView();
        //将错误信息传到页面
        modelAndView.addObject("message",message);
        //指向错误页面
        modelAndView.setViewName("error");
        return modelAndView;
    }
}

3配置错误页面

<%--
  Created by IntelliJ IDEA.
  User: Alex
  Date: 2017/6/29
  Time: 20:06
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>失败!</title>
</head>
<body>
${message}
</body>
</html>

4springMVC.xml中配置全局异常处理器

 <!--
    全局异常处理器
    只要类实现了HandlerExceptionResolver接口,就是一个全局异常处理器哦
    -->
    <bean class="com.alex.ssm.exception.CustomExceptionResolver"/>

注意:

系统自定义异常,建议在项目所有的功能都完成后再进行添加。

猜你喜欢

转载自www.cnblogs.com/liu1275271818/p/11495228.html
今日推荐