52SpringMVC - 异常处理器

简介: 52SpringMVC - 异常处理器

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

异常处理思路

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

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

自定义异常类

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

如果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;
  }
}

自定义异常处理器

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;
  }
}

异常处理器配置

在springmvc.xml中添加:

<!-- 配置全局异常处理器 -->
<bean  id="customHandleException"   class="cn.itcast.ssm.exception.CustomHandleException"/>

错误页面

<%@ 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>

异常测试

修改ItemController方法“queryItemList”,抛出异常:

/**
 * 查询商品列表
 * 
 * @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;
}

目录
相关文章
|
6月前
SpringMVC之拦截器和异常处理器
【1月更文挑战第20天】SpringMVC之拦截器和异常处理器
71 0
|
6月前
|
XML 前端开发 Java
SpringMVC 异常处理器
SpringMVC 异常处理器
36 0
|
6月前
SpringMVC异常处理机制
SpringMVC异常处理机制
34 0
|
6月前
SpringMVC之异常处理器
SpringMVC之异常处理器
|
监控 前端开发 Java
SpringMVC 的三种异常处理方式详解
SpringMVC 的三种异常处理方式详解
182 0
|
前端开发 应用服务中间件 容器
springMVC--异常处理
springMVC--异常处理
75 0
|
应用服务中间件
SpringMVC的异常处理(超详细)
SpringMVC的异常处理(超详细)
SpringMVC的异常处理(超详细)
springMvc54-简单异常处理二
springMvc54-简单异常处理二
156 0
springMvc53-简单异常处理
springMvc53-简单异常处理
132 0