博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
异常处理器
阅读量:6279 次
发布时间:2019-06-22

本文共 2287 字,大约阅读时间需要 7 分钟。

 

  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中添加:

 

 

5. 错误页面

error.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%>
Insert title here

系统发生异常了!

异常信息

${msg }

 

 

6. 异常测试

/** * 查询商品列表 *  * @return * @throws Exception */@RequestMapping(value = { "itemList", "itemListAll" })public ModelAndView queryItemList() throws Exception {    // 自定义异常    if (true) {        throw new MyException("自定义异常出现了~");    }    // 运行时异常    int a = 1 / 0;    // 查询商品数据    List
list = this.itemService.queryItemList(); // 创建ModelAndView,设置逻辑视图名 ModelAndView mv = new ModelAndView("itemList"); // 把商品数据放到模型中 mv.addObject("itemList", list); return mv;}

 

转载地址:http://fqyva.baihongyu.com/

你可能感兴趣的文章
iOS BLE 开发小记[4] 如何实现 CoreBluetooth 后台运行模式
查看>>
Item 23 不要在代码中使用新的原生态类型(raw type)
查看>>
为网页添加留言功能
查看>>
JavaScript—数组(17)
查看>>
Android 密钥保护和 C/S 网络传输安全理论指南
查看>>
以太坊ERC20代币合约优化版
查看>>
Why I Began
查看>>
同一台电脑上Windows 7和Ubuntu 14.04的CPU温度和GPU温度对比
查看>>
js数组的操作
查看>>
springmvc Could not write content: No serializer
查看>>
Python系语言发展综述
查看>>
新手 开博
查看>>
借助开源工具高效完成Java应用的运行分析
查看>>
163 yum
查看>>
第三章:Shiro的配置——深入浅出学Shiro细粒度权限开发框架
查看>>
80后创业的经验谈(转,朴实但实用!推荐)
查看>>
让Windows图片查看器和windows资源管理器显示WebP格式
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
vim使用点滴
查看>>