• 后端——框架——视图层框架——spring mvc——ExceptionResolver


      mvc的异常解析器有以下四种

    1. SimpleMappingExceptionResolver:建立异常与页面之间的映射关系,即出现异常之后,跳转到指定页面
    2. DefaultHanlderExceptionResolver:mvc的默认实现方式。
    3. ResponseStatusExceptionResolver:配置异常的返回码以及日志信息。
    4. ExceptionHandlerExceptionResolver:建议异常与方法之间的映射关系,即出现异常之后,运行指定的方法。

    1、SimpleMapping

      它的概念是建立异常类型与错误页面之间的映射关系,即出错之后,跳转到指定的页面。

    它有以下几个属性:

    1. exceptionsMapping:异常类型与页面之间的映射关系,key值为异常类型,value值为页面,它会经过ViewResolver处理。
    2. excludedExceptions:排除这些异常。
    3. defaultErrorView:若抛出的异常类型在exceptionsMapping找不到映射关系,使用默认的页面。抛出的异常类型不包含excluedExceptions中的值。
    4. defaultStatusCode:默认的状态码

    使用步骤如下:

    第一步,创建SimpleMappingExceptionResolver对象,配置上述的属性

    第二步,注册。注解方式是通过重写configureHandlerExceptionResolvers方法。Xml方式是通过配置SimpleMappingExceptionResolver的bean。

    测试,

    第一步,创建exception.properties,建立异常与页面的映射关系。它的内容如下:

    #  算术异常
    java.lang.ArithmeticException = error/arithmeticException
    

      第二步,创建SimpleMappingExceptionResolver对象,加载exception.properties文件,并配置上述属性

    // 创建SimpleMappingExceptionResolver
    SimpleMappingExceptionResolver simple = new SimpleMappingExceptionResolver();
    // 加载exception.properties
    Properties exceptions = new Properties();
    // 添加异常与页面的映射关系
    simple.setExceptionMappings(exceptions);
    // 排除异常,排除空指针异常
    simple.setExcludedExceptions(NullPointerException.class);
    // 设置默认的异常跳转页面
    simple.setDefaultErrorView("error/error.jsp");
    // 设置默认的异常码
    simple.setDefaultStatusCode(999);
    

      第三步,注册,重写configureHandlerExceptionResolvers方法。方法的参数为HandlerExceptionResolver集合,把新创建的对象添加到集合中。

      第四步,测试,在Controller方法中运行1/0,抛出算术异常,验证结果。

    2、ExceptionHandler

      建立异常类型与方法之间的映射关系。即出错之后,运行指定的方法。

      当抛出异常之后,会在当前Controller下查找有@ExceptionHandler注解的方法。若要设置全局的, 可以配置Controller的切面。具体做法把异常处理的方法提取到公共类中,在类上添加@ControllerAdvice注解,在方法上添加@ExceptionHandler注解。@ExceptionHandler只有一个属性value,值为异常类型对应的Class类集合。

    当value属性为空时,相当于默认值,会处理所有的异常。

    若value值重复时,即一个exception 类型有多个方法与之对应时,抛出IllegalStateException。

    当异常抛出,对应的方法执行之后,请求会被视为正常结束,返回的状态码为200。若想返回特定的响应码,可以配合@ResponseStatus注解。

    它的使用步骤如下:

    第一步,注入对象,查看dispatcher.properties, 它是默认注入的。

    第二步,编写方法,标注@ExceptionHandler,value属性指定异常类型。

    @ControllerAdvice(assignableTypes = {TestController.class,HelloController.class})
    public class ExceptionController {
    	/**
    	 * @Title: resolve
    	 * @Description:解决异常的方法
    	 * @return
    	 */
    	@ExceptionHandler(value = ArithmeticException.class)
    	public ModelAndView resolve() {
    		return new ModelAndView("error/arithmeticException");
    	}
    }
    

      示例中,只处理TestController和HelloController中抛出的异常

    注:@ControllerAdvice相当于AOP中的advice。

    3、 ResponseStatus

      配置异常类型的响应码以及异常信息,若没有,Web容器会使用默认的响应码和异常信息

    通过@ResponseStatus注解的code属性值配置响应码。它的值为HttpStatus枚举类型。

    通过@ResponseStatus注解的reason属性值配置响应码。

    它出现的方式有以下三种

    添加在自定义异常的类上。添加在任何处理请求的方法上,添加在请求流程相关的方法上,例如@ExceptionHandler标注的方法上。

    它是默认注入的。

    4、DefaultHandler

      它是mvc处理异常的默认方式。会调用response.sendError方法返回特定的响应码,异常信息。

    它兼容Servlet处理异常的方式,例如在web.xml中配置/error时,会跳转到其对应的处理器。

  • 相关阅读:
    用prototype属性来模拟一下类的继承
    Ajax 教程:Ajax 入门简介
    Ajax工作原理
    最新的Ajax教程和技术(上篇)
    javascript面向对象技术基础
    浏览器对象模型
    jQuery (选择器,属性,筛选,文档处理)
    shell(一)
    ntpntpdate时间同步
    centos7新系统安装
  • 原文地址:https://www.cnblogs.com/rain144576/p/14823825.html
Copyright © 2020-2023  润新知