springMVC的异常处理思路:
springMVC处理异常处理机制的两种方式:
第一种:使用springMVC提供的简单异常处理器。
第二种:实现spring的异常处理的接口HandlerEXceptionResolver来自定义异常处理类。
使用springMVC的简单异常处理器。
配置简单异常处理器:
<!--配置简单异常处理器-->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<!-- 是默认的视图 如果下面没有匹配到这个视图就需要进行跳转到默认的视图上 -->
<property name="defaultErrorView" value="error"/>
<!-- 根据视图类型进行匹配-->
<property name="exceptionMappings">
<map>
<!-- 错误类型以及要跳转的视图-->
<entry key="org.junit.runners.model.InvalidTestClassError" value="error1"/>
</map>
</property>
</bean>
也是经过依赖注入的形式进行配置,默认视图的意思是指,一旦出现异常,异常处理器并没有设置对于这个异常类型的配置,或者说设置了针对于这个异常类型的跳转页面但是并没有找到这个跳转页面就会跳转到默认视图上面。
Map类型的注入,其中key的值是指异常的类型,value的值就是要跳转的页面。
自定义异常处理
自定义异常处理的步骤:
- 自定义异常处理类实现HandlerExceptionResolver接口
- 配置异常处理器。
- 编写异常处理的页面。
- 测试异常跳转。
自定义异常处理器:
public class MyException implements HandlerExceptionResolver {
//参数中的Exception是异常处理对象 是捕获的异常对象 。其中的返回值是ModeAndView 是最后进行跳转的视图对象
//其中的参数包含了 request response 对象所以在捕获异常后可以进行原始的一些Sevlet的一些操作。
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
ModelAndView modelAndView = new ModelAndView();
//“instanceof关键字的作用是判断左边对象是否是右边类 ,也就是说判断左边的对象是不是右边类的对象
if (ex instanceof ClassCastException){
modelAndView.addObject("info","类型转换异常");
}
return modelAndView;
resolveException()
- 方法的返回值是ModeAndView类型,可以设置视图并进行返回视图。
- 方法的参数是:HttpServletRequest , HttpServletResponse , Exception ;其中Exception类型的参数是扑捉到的异常类型对象。可以通过扑捉到的异常类型对象进行有区别的操作。
配置自定义异常处理器代码:
<!-- 配置自定义的异常处理器 只需要简单的配置Bean就可以了-->
<bean class="com.itheima.zhujie.resover.MyException"/>
在springMVC的项目中遇到了异常可以直接抛出异常,一层一层的向上抛出异常,这样知道抛出到web层在抛出到springMVC 容器中由异常管理器进行处理,实现了异常与业务逻辑的解耦。
扩展:自定义异常: