最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

通過原理解析Spring mvc的內(nèi)置編碼過濾器

 更新時間:2017年09月24日 16:32:31   作者:jijs  
這篇文章通過原理主要給大家解析了關(guān)于Spring mvc的內(nèi)置編碼過濾器的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。

前言

在Spring mvc框架中是如何解決從頁面?zhèn)鱽淼淖址木幋a問題的呢?

下面我們來看看Spring框架給我們提供過濾器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> 

spring mvc 內(nèi)部提供了CharacterEncodingFilter過濾器,該過濾器有兩個參數(shù)encoding和forceEncoding。

1、encoding

設(shè)置請求響應(yīng)的字符編碼。(請求的數(shù)據(jù)使用encoding編碼解析,使用encoding編碼進行響應(yīng)的數(shù)據(jù))

2、forceEncoding

forceEncoding=true 強制所有的請求響應(yīng)都使用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() 方法。

getContentType() 方法

從代碼中發(fā)現(xiàn),contentType 就是從http請求頭中獲取 content-type屬性。

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

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • java中Hibernate的狀態(tài)總結(jié)

    java中Hibernate的狀態(tài)總結(jié)

    在本篇內(nèi)容里小編給大家整理的是一篇關(guān)于java中Hibernate的狀態(tài)總結(jié)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2021-01-01
  • JavaWeb開發(fā)使用Cookie創(chuàng)建-獲取-持久化、自動登錄、購物記錄、作用路徑

    JavaWeb開發(fā)使用Cookie創(chuàng)建-獲取-持久化、自動登錄、購物記錄、作用路徑

    這篇文章主要介紹了JavaWeb開發(fā)使用Cookie創(chuàng)建-獲取-持久化、自動登錄、購物記錄、作用路徑的相關(guān)知識,非常不錯,對cookie持久化知識感興趣的朋友一起學(xué)習(xí)吧
    2016-08-08
  • java隨機驗證碼生成實現(xiàn)實例代碼

    java隨機驗證碼生成實現(xiàn)實例代碼

    這篇文章主要介紹了java隨機驗證碼生成實現(xiàn)實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • spring.profiles.active配置使用小結(jié)

    spring.profiles.active配置使用小結(jié)

    spring.profiles.active?配置使得應(yīng)用程序能夠在不同的環(huán)境中使用不同的配置,本文主要介紹了spring.profiles.active配置使用小結(jié),具有一定的參考價值,感興趣的可以了解一下
    2024-07-07
  • JAVA應(yīng)用系統(tǒng)工具快捷托盤實例代碼

    JAVA應(yīng)用系統(tǒng)工具快捷托盤實例代碼

    JAVA應(yīng)用系統(tǒng)工具快捷托盤實例代碼,需要的朋友可以參考一下
    2013-02-02
  • java實現(xiàn)拼圖小游戲

    java實現(xiàn)拼圖小游戲

    這篇文章主要為大家詳細介紹了java實現(xiàn)拼圖小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • java鏈表的頭插法和尾插法詳解

    java鏈表的頭插法和尾插法詳解

    本文介紹了鏈表的基本概念,包括節(jié)點類Listnode和鏈表類Linklist,頭插法和尾插法是兩種常見的插入節(jié)點的方法,分別通過頭指針和游標來實現(xiàn),通過示例代碼和測試,展示了鏈表的創(chuàng)建和操作過程
    2024-12-12
  • Java數(shù)字簽名算法DSA實例詳解

    Java數(shù)字簽名算法DSA實例詳解

    這篇文章主要介紹了Java數(shù)字簽名算法DSA,結(jié)合實例形式分析了Java數(shù)字簽名算法DSA具體定義與使用技巧,需要的朋友可以參考下
    2018-05-05
  • Java中Map集合的常用方法詳解

    Java中Map集合的常用方法詳解

    本篇文章給大家?guī)淼膬?nèi)容是關(guān)于Java中Map集合的常用方法詳解,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。下面我們就來學(xué)習(xí)一下吧
    2021-11-11
  • Redis監(jiān)聽過期的key實現(xiàn)流程詳解

    Redis監(jiān)聽過期的key實現(xiàn)流程詳解

    本文主要介紹了Redis監(jiān)聽key的過期時間,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02

最新評論

安国市| 湖口县| 长岛县| 界首市| 米泉市| 六安市| 罗田县| 搜索| 化州市| 富源县| 通许县| 瓮安县| 扶余县| 卫辉市| 五河县| 宁明县| 京山县| 英德市| 永丰县| 岐山县| 稷山县| 横山县| 苗栗市| 宁城县| 高陵县| 泸西县| 沅江市| 克山县| 酒泉市| 汤阴县| 霍林郭勒市| 本溪市| 澄城县| 长丰县| 台东县| 池州市| 夏河县| 明光市| 京山县| 普兰县| 南城县|