zoukankan      html  css  js  c++  java
  • springmvc异常处理器

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

    1 异常处理的思路

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

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

    2 自定义异常类

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

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

    package com.test.springmvc.exception;
    
    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) {
            // Object handler:指定是发生异常的地方,包名+类名+方法名(形参) 字符串
    // 定义异常信息
            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="com.test.ssm.exception.CustomHandleException"/>

    5 准备一个错误页面

    <%@ 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>${msg}</h1>
    </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;
    }
  • 相关阅读:
    java学习笔记(2)
    java学习笔记(1)
    python3自用utils(备忘录)
    关于ubuntu环境的一切
    vim中F5编译运行代码
    kafka入门教程
    python中datetime的常用功能
    Hbase实战教程(转)
    根据时间戳(毫秒)计算年龄
    如何在Debian 10上安装Python 3.8
  • 原文地址:https://www.cnblogs.com/jepson6669/p/9038669.html
Copyright © 2011-2022 走看看