Spring MVC的异常处理机制

 

作用

如客户端调用web程序时,如果程序出现异常,特别是运行时异常;如果没有try-catch进行捕获,异常将最终不会被ExceptionResolver进行处理,导致程序出现500错误。亦或者当客户端访问一个不存在的商品详情时,此时需要呈现给用户一个显示页,用户告知“您查找的商品不存在”等信息。

没有异常处理机制下的程序

非运行时异常:

当程序需要显式的try-catch捕获进行处理时,不会造成500错误码。

但如果通过throws方式逐层抛出最终到Controller抛出,DispatcherServlet将异常分发给ExceptionResolver模块;如果未添加特殊处理,则程序抛出500错误码。

运行时异常:

由于不需要显式的try-catch,如果在程序未添加处理的情况下,通常会抛出500错误码。

访问详情不存在时显示页:

如果没有异常机制的统一处理,则添加return "redirect:/notFound.html";来处理

Spring MVC的异常处理机制下的处理方案

处理逻辑:

将系统中的异常、自定义异常(逻辑错误如访问详情时数据不存在),通过throws的方式,抛至spring的ExceptionResolver来统一进行处理。

有三种方式:SimpleMappingExceptionResolver spring提供的简单异常处理器实现,实现HandlerExceptionResolver接口的自定义异常处理器,@ExceptionHandler注解实现异常处理,

实现HandlerExceptionResolver接口的自定义异常处理器

实现方法:

 建立CustomExceptionResolver实现HandlerExceptionResolver 接口。实现resolveException(),用于完成根据当前异常类型,在展示页展示对应的提示。并需在springmvc.xml中配置这个自定义的异常处理器。

可以获取出现异常的对象信息,比较常用。

Spring MVC的异常处理机制_第1张图片

 

spring提供的简单异常处理器SimpleMappingExceptionResolver

通过自定义异常CustomException(属性message)。当系统出现CustomException异常时,封装当前的错误原因(如“您查找的商品不存在”),被ExceptionResolver下发至SimpleMappingExceptionResolver,通过配置文件找到对应的custom_error.jsp展示对应的错误信息。其他异常则通过error.jsp展示给客户端,提示“未知错误”。

Spring MVC的异常处理机制_第2张图片

@ExceptionHandler注解实现异常处理

使用@ExceptionHandler注解实现异常处理,需每一个controller都继承自该类,对于代码的侵入性大,一般不用。

 

404-500码的处理

当程序出现运行时异常Unchecked Exception时,由于其不需要显式的try-catch等处理,造成程序出现500错误码。当外部请求地址错误时,出现404错误码。

对于404/500码,大多数服务器支持了在web.xml中节点,来处理特定异常情况的显示页面,如tomcat项目下的配置如下:

  <error-page>

    <error-code>404error-code>

    <location>/spage/p_404.htmlocation>

  error-page>

  <error-page>

    <error-code>500error-code>

    <location>/spage/p_404.htmlocation>

error-page>

你可能感兴趣的:(spring)