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>

CharacterEncodingFilter過濾器類淺析
打開該類源碼,可以看到該類有三個類屬性
1、private String encoding; //要使用的字符集,一般我們使用UTF-8(保險起見UTF-8最好)private boolean
2、forceRequestEncoding = false; //是否強制設置request的編碼為encodingprivate boolean
3、forceResponseEncoding = false; //是否強制設置response的編碼為encoding

主要方法只有一個,也就是下面這個,代碼邏輯很簡單,入注釋所解釋
  @Override
  protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {

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

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

之前執行的,這也就是說這段代碼的作用是設置response的默認編碼方式,在之后的代碼里是可以根據需求設置為其他編碼的,即這里設置的編碼可能不是最終的編碼,網上很多文檔說這里設置的是最終的編碼方式,這是錯的。

 <二>

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM