91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

卫辉市| 新巴尔虎左旗| 沽源县| 平南县| 衡阳市| 德兴市| 鄂伦春自治旗| 松阳县| 文化| 富平县| 禹城市| 二连浩特市| 峨边| 黔西县| 库伦旗| 祁阳县| 赤峰市| 郸城县| 策勒县| 肥东县| 云安县| 彝良县| 博乐市| 原阳县| 休宁县| 连州市| 阿城市| 叶城县| 苗栗市| 中宁县| 乡城县| 方正县| 繁峙县| 凌云县| 洪洞县| 元氏县| 旺苍县| 鄢陵县| 札达县| 商水县| 九龙县|