SpringMVC之国际化&文件上传&拦截器&异常处理

SpringMVC之国际化&文件上传&拦截器&异常处理

一 国际化

1、国际化概述
  1. 默认情况下,SpringMVC 根据 Accept-Language 参数判断客户端的本地化类型。
  2. 当接受到请求时,SpringMVC 会在上下文中查找一个本地化解析(LocalResolver),找到后使用它获取请求所对应的本地化类型信息
  3. SpringMVC 还允许装配一个动态更改本地化类型的拦截器,这样通过指定一个请求参数就可以控制单个请求的本地化类型。
  4. SessionLocaleResolver & LocaleChangeInterceptor 工作原理
    1在这里插入图片描述
  5. 本地化解析器和本地化拦截器
    (1)AcceptHeaderLocaleResolver:根据 HTTP 请求头的 Accept-Language 参数确定本地化类型,如果没有显式定义本地化解析器, SpringMVC 使用该解析器
    (2)CookieLocaleResolver:根据指定的 Cookie 值确定本地化类型
    (3) SessionLocaleResolver:根据 Session 中特定的属性确定本地化类型
    (4)LocaleChangeInterceptor:从请求参数中获取本次请求对应 的本地化类型
    在这里插入图片描述
二 文件上传
  1. 概述
    (1)Spring MVC 为文件上传提供了直接的支持,这种支持是通过即插即用的 MultipartResolver 实现的。Spring 用 Jakarta Commons FileUpload 技术实现了一个 MultipartResolver 实现类:CommonsMultipartResovler
    (2)Spring MVC 上下文中默认没有装配 MultipartResovler,因此默认情况下不能处理文件的上传工作,如果想使用 Spring 的文件上传功能,需现在上下文中配置 MultipartResolver
  2. 配置 MultipartResolver
    (1)defaultEncoding: 必须和用户 JSP 的 pageEncoding 属性一致,以便正确解析表单的内容
    (2)为了让 CommonsMultipartResovler 正确工作,必须先将 Jakarta Commons FileUpload 及 Jakarta Commons io 的类包添加到类路径下。
    (3)配置情况 在这里插入图片描述
  3. 案例
    (1)表单页面在这里插入图片描述
    (2)方法 在这里插入图片描述

三 使用拦截器

  1. 自定义拦截器
    (1)Spring MVC也可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义的拦截器必须实现HandlerInterceptor接口
    preHandle():这个方法在业务处理器处理请求之前被调用,在该方法中对用户请求 request 进行处理。如果程序员决定该拦截器对 请求进行拦截处理后还要调用其他的拦截器,或者是业务处理器去进行处理,则返回true;如果程序员决定不需要再调用其他的组件 去处理请求,则返回false
    postHandle():这个方法在业务处理器处理完请求后,DispatcherServlet 向客户端返回响应前被调用,在该方法中对 用户请求request进行处理。
    afterCompletion():这个方法在 DispatcherServlet 完全处理完请求后被调用,可以在该方法中进行一些资源清理的操作
  2. 拦截器方法执行顺序
    在这里插入图片描述
  3. 配置自定义拦截器
    在这里插入图片描述
  4. 流程图
    在这里插入图片描述

四 异常处理

  1. 介绍
    (1)Spring MVC 通过 HandlerExceptionResolver 处理程序的异常,包括 Handler 映射、数据绑定以及目标方法执行时发生的异常
    (2)SpringMVC 提供的 HandlerExceptionResolver 的实现类 在这里插入图片描述
  2. HandlerExceptionResolver
    (1)DispatcherServlet 默认装配的 HandlerExceptionResolver :
    ① 没有使用 mvc:annotation-driven/ 配置 在这里插入图片描述
    ② 使用了mvc:annotation-driven/ 配置 在这里插入图片描述
  3. ExceptionHandlerExceptionResolver
    (1)主要处理 Handler 中用 @ExceptionHandler 注解定义的方法
    (2)@ExceptionHandler 注解定义的方法优先级问题:例如发生的是NullPointerException,但是声明的异常有 RuntimeException 和 Exception,此时会根据异常的最近 继承关系找到继承深度最浅的那个 @ExceptionHandler 注解方法,即标记了 RuntimeException 的方法
    (3)ExceptionHandlerMethodResolver 内部若找不到**@ExceptionHandler** 注解的话,会找 @ControllerAdvice 中的@ExceptionHandler 注解方法
  4. ResponseStatusExceptionResolver
    (1)在异常及异常父类中找到 @ResponseStatus 注解,然后使用这个注解的属性进行处理
    (2)定义一个 @ResponseStatus 注解修饰的异常类 在这里插入图片描述
    (3)若在处理器方法中抛出了HTTP Status 401异常:
    ExceptionHandlerExceptionResolver 不解析述异常。由于触发的异常 UnauthorizedException 带有@ResponseStatus 注解。因此会被ResponseStatusExceptionResolver 解析 到。最后响应HttpStatus.UNAUTHORIZED 代码给客户 端。HttpStatus.UNAUTHORIZED 代表响应码401,无权限。 关于其他的响应码请参考 HttpStatus 枚举类型源码
  5. DefaultHandlerExceptionResolver
    (1)对一些特殊的异常进行处理,比如NoSuchRequestHandlingMethodException、HttpRequestMethodNotSupportedException、HttpMediaTypeNotSupportedException、HttpMediaTypeNotAcceptableException 等。
  6. SimpleMappingExceptionResolver
    (1)如果希望对所有异常进行统一处理,可以使用SimpleMappingExceptionResolver,它将异常类名映射为视图名,即发生异常时使用对应的视图报告异常 在这里插入图片描述
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值