异常处理器

 

  springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑。

      

1. 异常处理思路

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

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

 

 

 

 

2. 自定义异常类

       为了区别不同的异常,通常根据异常类型进行区分,这里我们创建一个自定义系统异常。

如果controller、service、dao抛出此类异常说明是系统预期处理的异常信息。

public class MyException extends Exception {

    // 异常信息

    private String message;

    public MyException() {

       super();

    }

 

    public MyException(String message) {

       super();

       this.message = message;

    }

    public String getMessage() {

       return message;

    }
    public void setMessage(String message) {

       this.message = message;

    }

 

}

 

 

 

3. 自定义异常处理器

public class CustomHandleException implements HandlerExceptionResolver {


    @Override

    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,

           Exception exception) {

       // 定义异常信息

       String msg;


       // 判断异常类型

       if (exception instanceof MyException) {

           // 如果是自定义异常,读取异常信息

           msg = exception.getMessage();

       } else {

           // 如果是运行时异常,则取错误堆栈,从堆栈中获取异常信息

           Writer out = new StringWriter();

           PrintWriter s = new PrintWriter(out);

           exception.printStackTrace(s);

           msg = out.toString();

       }
 

       // 把错误信息发给相关人员,邮件,短信等方式

       // TODO

 
       // 返回错误页面,给用户友好页面显示错误信息

       ModelAndView modelAndView = new ModelAndView();

       modelAndView.addObject("msg", msg);

       modelAndView.setViewName("error");

 

       return modelAndView;

    }

}

 

 

 

4. 异常处理器配置

在springmvc.xml中添加:

<!-- 配置全局异常处理器 -->

<bean

id="customHandleException" class="cn.itcast.ssm.exception.CustomHandleException"/>

 

 

5. 错误页面

error.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

    <h1>系统发生异常了!</h1>

    <br />

    <h1>异常信息</h1>

    <br />

    <h2>${msg }</h2>

 

</body>

</html>

 

 

6. 异常测试

/**
 * 查询商品列表
 * 
 * @return
 * @throws Exception
 */
@RequestMapping(value = { "itemList", "itemListAll" })
public ModelAndView queryItemList() throws Exception {
    // 自定义异常
    if (true) {
        throw new MyException("自定义异常出现了~");
    }

    // 运行时异常
    int a = 1 / 0;

    // 查询商品数据
    List<Item> list = this.itemService.queryItemList();
    // 创建ModelAndView,设置逻辑视图名
    ModelAndView mv = new ModelAndView("itemList");
    // 把商品数据放到模型中
    mv.addObject("itemList", list);

    return mv;
}

 

posted @ 2018-03-06 22:00  QiaoZhi  阅读(623)  评论(0编辑  收藏  举报