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

    1.异常处理的思路

    系统中异常包括两类:预期异常和运行时异常 RuntimeException,前者通过捕获异常从而获取异常信息,
    后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。
    系统的 dao、 service、 controller 出现都通过 throws Exception 向上抛出,最后由 springmvc 前端
    控制器交由异常处理器进行异常处理,最终返回一个比较友好的错误提示页面

     2.示例

    页面

    index.jsp
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <body>
        <h2>异常处理</h2>
        <a href="user/testException">测试异常处理</a>
    </body>
    </html>
    
    success.jsp
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <h3>跳转成功</h3>
    </body>
    </html>
    
    控制器
    @Controller
    @RequestMapping("/user")
    public class UserController {
        @RequestMapping("testException")
        public String testException() throws Exception{
            System.out.println("run testException()...");
            //模拟异常
            int a = 10/0;
            return "success";
        }
    }

    没有做异常处理,异常会一步一步往上抛,到了浏览器就会出现不友好的页面,页面直接显示错误

    想要解决,上面说到,controller向上抛异常给前端控制器没有问题,这里就需要写一个异常处理器组件,并且配置好

    三个步骤

    1.编写异常类(做提示信息)

    public class MyException extends Exception{
        private String message;
    
        public MyException(String message) {
            this.message = message;
        }
    
        public void setMessage(String message) {
            this.message = message;
        }
    
        @Override
        public String getMessage() {
            return message;
        }
    }

    2.编写异常处理类

    public class MyExceptionResolver implements HandlerExceptionResolver {
        @Override
        public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
            e.printStackTrace();
            MyException myException = null;
            //如果抛出的是自定义异常,则直接转换
            if(e instanceof MyException){
                myException = (MyException) e;
            }else{
                //如果不是,则重新构造一个自定义异常
                myException = new MyException("系统正在维护...");
            }
            ModelAndView mv = new ModelAndView();
            mv.addObject("errorMsg", myException.getMessage());
            mv.setViewName("error");
            return mv;
        }
    }

    3.配置异常处理器,在springmvc.xml中配置

        <!--配置自定义异常处理器-->
        <bean class="com.cong.exception.MyExceptionResolver" id="myExceptionResolver"></bean>

    修改一下控制器

    @Controller
    @RequestMapping("/user")
    public class UserController {
        @RequestMapping("testException")
        public String testException() throws MyException{
            System.out.println("run testException()...");
            //模拟异常
            try {
                int a = 10/0;
            }catch (Exception e){
                //sprint exception message
                e.printStackTrace();
                //抛出异常
                throw new MyException("出现自定义异常...");
            }
            return "success";
        }
    }

    错误提示页面

    <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
    <html>
    <head>
        <title>错误页面</title>
    </head>
    <body>
        <h3>执行出错</h3>
        ${errorMsg}
    </body>
    </html>

    结果

    爱生活,爱码字

    我是匆匆、我曾喂自己半年酒。

    好好生活吧,有缘或许相见。

  • 相关阅读:
    .Net core 上传文件
    Vue--判断用户首次进入页面还是刷新页面?
    博学笃志,切问近思,此八字,是收放心的工夫。 神闲气静,智深勇沉,此八字,是干大事的本领。
    用javascript替换URL中的参数值
    ASP.Net Core SignalR
    Android菜鸡脉脉求助:4年开发经验,深圳不到15K,我该怎么办?
    Android性能优化
    新手避坑指南:Android组件化开发详解
    Android开发,没有跟上跨平台技术发展是你职业规划最大的可悲
    字节跳动面试官:一张图片占据的内存大小是如何计算
  • 原文地址:https://www.cnblogs.com/ccoonngg/p/11855030.html
Copyright © 2011-2022 走看看