springmvc字符编码过滤器CharacterEncodingFilter浅析

 

在web.xml中的配置
<!-- characterEncodingFilter字符编码过滤器 -->
  <filter>
  <filter-name>characterEncodingFilter</filter-name>
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  <init-param>
    <!--要使用的字符集,通常咱们使用UTF-8(保险起见UTF-8最好)-->
    <param-name>encoding</param-name>
    <param-value>UTF-8</param-value>
  </init-param>
  <init-param>
    <!--是否强制设置request的编码为encoding,默认false,不建议更改-->
    <param-name>forceRequestEncoding</param-name>
    <param-value>false</param-value>
  </init-param>
  <init-param>
    <!--是否强制设置response的编码为encoding,建议设置为true,下面有关于这个参数的解释-->
    <param-name>forceResponseEncoding</param-name>
    <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
  <filter-name>characterEncodingFilter</filter-name>
  <!--这里不能留空或者直接写 ' / ' ,否者不起做用-->
  <url-pattern>/*</url-pattern>
  </filter-mapping>web

CharacterEncodingFilter过滤器类浅析
打开该类源码,能够看到该类有三个类属性
一、private String encoding; //要使用的字符集,通常咱们使用UTF-8(保险起见UTF-8最好)private boolean
二、forceRequestEncoding = false; //是否强制设置request的编码为encodingprivate boolean
三、forceResponseEncoding = false; //是否强制设置response的编码为encodingspring

主要方法只有一个,也就是下面这个,代码逻辑很简单,入注释所解释
  @Override
  protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {app

    String encoding = getEncoding();
    if (encoding != null) { //若是设置了encoding的值,则根据状况设置request和response的编码
      //若设置request强制编码或request自己就没有设置编码
      //则设置编码为encoding表示的值
      if (isForceRequestEncoding() || request.getCharacterEncoding() == null) {
        request.setCharacterEncoding(encoding);
      }
      //若设置response强制编码,则设置编码为encoding表示的值
      if (isForceResponseEncoding()) { //请注意这行代码,下面有额外提醒
        response.setCharacterEncoding(encoding);
      }
    }
  filterChain.doFilter(request, response);
  }ide

# 额外提醒
  if (isForceResponseEncoding()) {
    response.setCharacterEncoding(encoding);
  }
是在
  filterChain.doFilter(request, response);编码

以前执行的,这也就是说这段代码的做用是设置response的默认编码方式,在以后的代码里是能够根据需求设置为其余编码的,即这里设置的编码可能不是最终的编码,网上不少文档说这里设置的是最终的编码方式,这是错的。url

 <二>xml

  

相关文章
相关标签/搜索