Spring-web源码解析之Filter-CharacterEncodingFilter

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 基于4.1.7.RELEASE在web.xml我们经常看见这么一段 encodingFilter org.

基于4.1.7.RELEASE


在web.xml我们经常看见这么一段

<filter>
   <filter-name>encodingFilter</filter-name>
   <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
   <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
   </init-param>
</filter>

这里注册了一个字符串编码的Filter,下面我们就来看看CharacterEncodingFilter的源码,首先看看类图


CharacterEncodingFilter并不是直接实现Filter接口,而是继承了OncePerRequestFilter,其作用稍后再讲。

CharacterEncodingFilter含有两个属性,一个是在web.xml中经常出现的encoding,它指明了用于设置request的encoding的值

另一个是foreceEncoding,默认为false,如果设置为true它就会使encoding属性强制替换掉request中的encoding值,而不管request获取的encoding是否为空。

下面看其主要的方法

protected void doFilterInternal(
      HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
      throws ServletException, IOException {

   if (this.encoding != null && (this.forceEncoding || request.getCharacterEncoding() == null)) {
      request.setCharacterEncoding(this.encoding);
      if (this.forceEncoding) {
         response.setCharacterEncoding(this.encoding);
      }
   }
   filterChain.doFilter(request, response);
}

上面说过encoding是设置request的编码,而这个方法就是具体实现过程。如果设置了forceEncoding,还会同时将response的默认编码设置为encoding。

目录
相关文章
|
20小时前
|
Java Spring
Spring底层架构源码解析(三)
Spring底层架构源码解析(三)
|
20小时前
|
XML Java 数据格式
Spring底层架构源码解析(二)
Spring底层架构源码解析(二)
|
1天前
|
算法 Java 程序员
Map - TreeSet & TreeMap 源码解析
Map - TreeSet & TreeMap 源码解析
7 0
|
1天前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
11 0
|
1月前
|
存储 缓存 Java
什么是线程池?从底层源码入手,深度解析线程池的工作原理
本文从底层源码入手,深度解析ThreadPoolExecutor底层源码,包括其核心字段、内部类和重要方法,另外对Executors工具类下的四种自带线程池源码进行解释。 阅读本文后,可以对线程池的工作原理、七大参数、生命周期、拒绝策略等内容拥有更深入的认识。
102 29
什么是线程池?从底层源码入手,深度解析线程池的工作原理
|
1月前
|
开发工具
Flutter-AnimatedWidget组件源码解析
Flutter-AnimatedWidget组件源码解析
157 60
|
1月前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
267 37
|
2天前
|
存储 Java API
从源码角度解析ArrayList.subList的几个坑!
从源码角度解析ArrayList.subList的几个坑!
|
12天前
|
Java Spring 容器
Spring IOC、AOP与事务管理底层原理及源码解析
【10月更文挑战第1天】Spring框架以其强大的控制反转(IOC)和面向切面编程(AOP)功能,成为Java企业级开发中的首选框架。本文将深入探讨Spring IOC和AOP的底层原理,并通过源码解析来揭示其实现机制。同时,我们还将探讨Spring事务管理的核心原理,并给出相应的源码示例。
50 9
|
9天前
|
存储 编译器 C++
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
29 2

推荐镜像

更多