Java CharacterEncodingFilter案例详解

作者:NicoJ 时间:2022-03-21 18:22:32 

一、什么是CharacterEncodingFilter

官方解释如下

Java CharacterEncodingFilter案例详解

是spring内置过滤器的一种,用来指定请求或者响应的编码格式。在web开发中经常被从来使用

二、CharacterEncodingFilter的用法

在web.xml中的配置


 <filter>
       <filter-name>characterEncodingFilter</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>
       <init-param>
           <param-name>forceEncoding</param-name>
           <param-value>true</param-value>
       </init-param>
   </filter>
   <filter-mapping>
       <filter-name>characterEncodingFilter</filter-name>
       <url-pattern>/*</url-pattern>
   </filter-mapping>

其中encoding用来指定编码格式,forceEncoding表示是否强制response的编码格式也是encoding格式

三、CharacterEncodingFilter 原理

服务器启动的时候就会创建Filter,将init-param中的参数加载,注入到CharacterEncodingFilter 类中,浏览器每次发送请求都会经过这个过滤器,然后调用doFilterInternal

CharacterEncodingFilter 类图

Java CharacterEncodingFilter案例详解

可以看到CharacterEncodingFilter继承OncePerRequestFilter,OncePerRequestFilter是个抽象类,其中的抽象方法doFilterInternal被CharacterEncodingFilter实现,同时OncePerRequestFilter实现了doFilter方法,调用了doFilterInternal方法。

doFilterInternal方法


@Override
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);
}

来源:https://blog.csdn.net/weixin_36344031/article/details/83410753

标签:Java,CharacterEncodingFilter
0
投稿

猜你喜欢

  • 批处理一键安装JDK/一键安装JRE和自动配置Java环境变量

    2023-11-29 05:28:30
  • Java 关键字 速查表介绍

    2022-07-03 22:04:48
  • SpringCloud用Zookeeper搭建配置中心的方法

    2022-12-17 18:16:18
  • IntelliJ IDEA快速创建getter和setter方法

    2023-06-04 00:44:46
  • Java中对象与C++中对象的放置安排的对比

    2022-05-31 15:07:18
  • 小程序与后端Java接 口交互实现HelloWorld入门

    2023-11-04 18:55:31
  • Android登录注册功能 数据库SQLite验证

    2023-10-01 20:58:55
  • java多线程有序读取同一个文件

    2022-05-28 20:41:57
  • 老生常谈java中cookie的使用

    2023-11-11 04:37:59
  • 使用Java桥接模式打破继承束缚优雅实现多维度变化

    2023-08-23 09:00:34
  • Mybatis初始化知识小结

    2023-11-01 13:59:27
  • java之路径分隔符介绍

    2022-12-14 22:35:23
  • mybatis框架xml下trim中的prefix与suffix等标签的用法

    2023-09-20 18:55:24
  • Java 求解如何把二叉搜索树转换为累加树

    2021-11-19 14:09:54
  • 教你如何使用Java输出各种形状

    2023-08-21 00:46:55
  • netty pipeline中的inbound和outbound事件传播分析

    2023-08-27 06:57:00
  • Java8中的LocalDateTime你会使用了吗

    2023-11-15 07:02:07
  • 使用反射方式获取JPA Entity的属性和值

    2023-07-24 17:43:22
  • springboot schedule 解决定时任务不执行的问题

    2021-05-30 05:00:38
  • Java8新特性:lambda表达式总结

    2023-11-29 00:16:52
  • asp之家 软件编程 m.aspxhome.com