CharacterEncodingFilter 详解

发布时间:2025-12-09 14:00:21 浏览次数:4

一、什么是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 类图

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

doFilterInternal方法

@Overrideprotected 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);}
需要做网站?需要网络推广?欢迎咨询客户经理 13272073477