SpringMVC应用 -- 异常处理器

一:概述

Spring MVC提供的统一全局异常处理能够很好解决异常信息直接返回的尴尬以及异常页面统一的问题。Spring Mvc提供了四种内置的异常处理实现,当然也可以自定义扩展实现异常处理,对于某些HTTP异常状态码web.xml中也可以针对状态码配置异常页面等

二:SimpleMappingExceeptionResolver

该异常处理实现是将异常类型与异常页面进行绑定处理,可以配置某种异常抛出时跳转特定的页面

2.1 配置详解
属性类型作用备注
orderInteger处理器执行顺序
defaultErrorViewString默认所有异常跳转页面处理的是没有特定配置的异常
exceptionAttributeString异常页面中获取异常对象的key默认exception
exceptionMappingsPropers定义需要绑定特定异常页面的异常类型
excludedExceptionsClass[]该异常处理器不处理的异常
defaultStatusCodeInteger异常处理器处理异常后返回HTTP请求的状态码默认是200
statusCodesMap<String,Integer>绑定某个异常页面的HTTP请求状态码key指定异常页面名字,value指定状态码
2.2 异常处理测试

SpringMVC配置文件中注入SimpleMappingExceeptionResolver实例,设置默认异常页面error.jsp,针对非法访问异常绑illegalAccess.jsp页面,不处理空指针异常,异常对象页面获取key为ex
在这里插入图片描述
控制层提供三个处理器,分别抛出空指针、非法状态、类转换异常。浏览器访问结果如下,符合配置需求
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3 页面状态码测试

默认异常页面状态码为5000,当跳转到非法访问异常页面时状态码为6000
在这里插入图片描述
测试异常处理器处理类转换异常与非法访问异常,查看状态返回码符合配置
在这里插入图片描述
在这里插入图片描述

2.4 执行顺序测试

配置两个异常处理器,order执行顺序分别为1、2,通过跳转不同的异常页面判定异常处理器执行。当发生空指针异常时两个异常处理器都能执行,最后跳转页面为order属性为1的非法访问异常页面。结论就是order属性越小,异常处理器执行顺序越高
在这里插入图片描述
在这里插入图片描述

三:DefaultHandlerExceptionResolver

用以处理SpringMVC标准异常,将标准异常输出匹配HTTP标准状态码。比如当控制层定义支持请求类型为POST,发送GET请求,SpringMVC中将抛出HttpRequestMethodNotSupportedException。这时候异常处理器DefaultHandlerExceptionResolver就能捕获异常并进行处理,其处理源码示意如下
在这里插入图片描述
Response输出异常,异常状态码SC_METHOD_NOT_ALLOWED是在HttpServletResponse中定义常量405
在这里插入图片描述
在这里插入图片描述

四:ResponseStatusExceptionResolver

该异常处理器与DefaultHadlerExceptionResolver异常处理器一致,都是SpringMVC默认会装载的异常处理器。作用在于与@ResponseStatus注解配合,将注解中映射的HTTP状态码与异常描述输出到前端
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五:ExceptionHandlerExceptionResolver

配合注解@ExceptionHandler使用的异常处理器,注解@ExceptionHandler限制要求必须与抛出异常方法在同一个类中才能生效,比较尴尬。结果就是每个类中都需要这么一个注解的方法,反正我不喜欢用这个异常处理,感兴趣可以自行Google

六:自定义异常处理

前面讲解的四个SpringMVC异常处理器实现都是HandlerExceptionResolver接口实现类,如果某些异常需要自定义逻辑处理则可以自行实现该接口定义异常处理器。该接口就一个方法resolveException(),该方法中重写异常处理逻辑

6.1 自定义异常处理器

在这里插入图片描述

6.2 测试自定义异常处理器

在这里插入图片描述

七:web.xml定义

当最终异常抛出到WEB容器中都未做任何处理的时候就可以在web.xml中配置定义异常页面,当然这里配置可以根据HTTP状态码亦或是异常进行配置。当请求抛出空指针异常会执行哪个error-page?根据作者的测试是当异常抛出会首先检查是否有定义<exception-type>,如果没有再根据Httpstatus进行处理
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值