系统中异常包括两类:预期异常和运行时异常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>
第四步 你自己测试 这里的结结果:
知识点就那么多 其实异常还是比较容易处理的,主要抓的到 ,什么都好说 对吧。