• 18. Springmvc 处理异常


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

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

    异常处理两种方式

    1.使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver 

    2.实现Spring的异常处理接口HandlerExceptionResolver 自定义自己的异常处理器

    那么我们自己看看怎么用:

    你可以先制造一点异常出来。

    1. 见文生义  简单映射异常解析  啊哈哈:

    这玩意是Springmvc自己有的,我们配置即可

    现在我控制器 里面抛两个异常出去,分别是:

     一个是转换异常 (允许时异常) ,一个是我创建的异常(这里抛出)

    然后我们配异常处理跳转:

    我们直接在SpringMVC中配置文件xml中配一个bean:

     

        <!-- 配置异常处理器  -->
        <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
            <property name="defaultErrorView" value="error"/>   <!--这里已配置视图解析器-->
            <property name="exceptionMappings">      <!--这里配置异常处理 参数是个map集合,集合有很多可以抓的异常-->
                <map>
                    <entry key="MyException" value="myerror"></entry>
                    <entry key="java.lang.ClassCastException" value="error"></entry>
                </map>
    
            </property>
        </bean>

    其中里面也说了:

    bean是直接配 SimpleMappingExceptionResolver 的地址即可。

    defaultErrorView  这个是默认异常,意思是说如果下面exceptionMappings中配置的异常都没有的话,就交给他跳转。【默认】

    value 就代表要跳转的视图,为什么只写名字呢 因为我在配置文件中已配好 视图解析器

    exceptionMappings 这个呢是添加异常处理,他的参数是个map 集合,集合可以装很多异常,key装的是异常、value 也就是跳转的视图。

    很容易理解吧。  这个就这样写即可,直接配 很简单啊。

    2.我们需要自己写接口 自己配置的 自己写逻辑

    ① 创建异常处理器类实现HandlerExceptionResolver

    ② 配置异常处理器

    ③ 编写异常页面

    ④ 测试异常跳转

    这种方式其实看起来繁琐。。。。但是写起来 杠杠的:

    package com.bihu;
    
    import org.springframework.web.servlet.HandlerExceptionResolver;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class Exception implements HandlerExceptionResolver {
        /***
         *
         *  实现这个接口,重写一个方法,参数如下:
          * @param request  :   普通Request 请求
         * @param response  :   普通Response响应
         * @param handler   :   对象 ,具体不知道是什么 应该和拦截器那个一样
         * @param ex        :   封装的内个异常
         * @return  返回的是一个ModelAndView  我们可携带数据 然后在跳转页面显示即可。
         */
    
        @Override
        public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, java.lang.Exception ex) {
            ModelAndView modelAndView = new ModelAndView();
            //判断是什么异常 然后直接拦截到做响应操作
            if (ex instanceof NumberFormatException){
                modelAndView.addObject("info","对不起 出现了NumberFormatException异常!");
                modelAndView.setViewName("error");
            }else if (ex instanceof NullPointerException){
                modelAndView.addObject("info","对不起 出现了NullPointerException异常!");
                modelAndView.setViewName("error");
            }else{
                modelAndView.addObject("info","捕获到异常" + ex);
                modelAndView.setViewName("error");
            };
            
            //其实前两个都是自己判断异常
            //看的出 最后一个相当于第一种方式的内个default  默认
            
            
            return modelAndView;
        }
    }

    上面代码设置的视图 已配置视图解析器 。所以设置的视图只有名字,这点要知道即可。。。。

    第二步我们直接在配置文件配置声明即可:

    <!--直接配即可 非常的方便啊-->
    <bean class="com.bihu.Exception"></bean>

    第三步编写 错误的跳转视图

    这里自己写 啊  我这里直接显示info即可:

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <h2>${info}</h2>
    </body>
    </html>

    第四步 你自己测试 这里的结结果:

    知识点就那么多  其实异常还是比较容易处理的,主要抓的到 ,什么都好说 对吧。

    本文来自博客园,作者:咸瑜,转载请注明原文链接:https://www.cnblogs.com/bi-hu/p/15024975.html

  • 相关阅读:
    跳出IFrame几种方式
    EChart使用简单介绍
    ckplayer视频播放插件使用
    uploadify文件批量上传
    纵表与横表互转实例(转)
    Sublime Text3使用记录
    异步上传,显示进度条
    JS手机浏览器判断(转)
    命令行创建maven模块工程
    eclipse创建maven模块工程
  • 原文地址:https://www.cnblogs.com/bi-hu/p/15024975.html
Copyright © 2020-2023  润新知