亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring mvc中內置編碼過濾器的原理是什么

發布時間:2020-12-07 16:00:34 來源:億速云 閱讀:503 作者:Leah 欄目:編程語言

Spring mvc中內置編碼過濾器的原理是什么?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

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> 

spring mvc 內部提供了CharacterEncodingFilter過濾器,該過濾器有兩個參數encoding和forceEncoding。

1、encoding

設置請求響應的字符編碼。(請求的數據使用encoding編碼解析,使用encoding編碼進行響應的數據)

2、forceEncoding

forceEncoding=true 強制所有的請求響應都使用encoding編碼。

forceEncoding=false 如果請求頭中包含charset,則使用chartset編碼,否則使用encoding編碼。

CharacterEncodingFilter 源碼分析

public class CharacterEncodingFilter extends OncePerRequestFilter {

 private String encoding;
 private boolean forceRequestEncoding = false;
 private boolean forceResponseEncoding = false;

 public void setEncoding(String encoding) {
 this.encoding = encoding;
 }

 public void setForceEncoding(boolean forceEncoding) {
 this.forceRequestEncoding = forceEncoding;
 this.forceResponseEncoding = forceEncoding;
 }

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

 String encoding = getEncoding();
 if (encoding != null) {
  if (isForceRequestEncoding() || request.getCharacterEncoding() == null) {
  request.setCharacterEncoding(encoding);
  }
  if (isForceResponseEncoding()) {
  response.setCharacterEncoding(encoding);
  }
 }
 filterChain.doFilter(request, response);
 }
 ......
}

CharacterEncodingFilter 中包含 三個屬性 encoding、forceRequestEncoding、forceResponseEncoding。

  • encoding:字符編碼類型
  • forceRequestEncoding:request 是否強制使用encoding編碼
  • forceResponseEncoding:response 是否強制使用encoding編碼

只要過濾器中配置了forceEncoding 屬性,則forceRequestEncoding和forceResponseEncoding 則保持一致,都使用forceEncoding的值。

doFilterInternal() 方法

該方法是過濾器的核心方法。

如果forceRequestEncoding=true,和forceResponseEncoding=true,則request和response都是用配置的encoding。

如果forceRequestEncoding=false, 則判斷request.getCharacterEncoding()是否有值,如果有值則使用客戶端傳過來的編碼(例如:charset=utf-8

request.getCharacterEncoding() 解析

request中獲取encoding,追蹤org.apache.coyoteRequest.java類中getCharacterEncoding() 方法。

Spring mvc中內置編碼過濾器的原理是什么

getContentType() 方法

Spring mvc中內置編碼過濾器的原理是什么

從代碼中發現,contentType 就是從http請求頭中獲取 content-type屬性。

Spring mvc中內置編碼過濾器的原理是什么

判斷 content-type 中是否包含charset屬性。如果存在則解析charset的屬性值,并返回。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

嘉定区| 宝兴县| 金塔县| 陆河县| 若羌县| 闵行区| 巴林右旗| 平顶山市| 汝州市| 晋中市| 宝鸡市| 建瓯市| 晋城| 当阳市| 扎赉特旗| 武威市| 调兵山市| 十堰市| 改则县| 中阳县| 光山县| 思南县| 翼城县| 淮南市| 密山市| 金坛市| 乾安县| 延庆县| 泽普县| 南丹县| 新蔡县| 洮南市| 远安县| 司法| 兴文县| 应城市| 新余市| 辽源市| 盐源县| 富锦市| 长武县|