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

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

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

前言

在Spring mvc框架中是如何解決從頁(yè)面?zhèn)鱽?lái)的字符串的編碼問(wèn)題的呢?

下面我們來(lái)看看Spring框架給我們提供過(guò)濾器CharacterEncodingFilter,話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧。

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> 
 <!-- 是否強(qiáng)制所有請(qǐng)求都使用該字符編碼 -->
 <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過(guò)濾器,該過(guò)濾器有兩個(gè)參數(shù)encoding和forceEncoding。

1、encoding

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

2、forceEncoding

forceEncoding=true 強(qiáng)制所有的請(qǐng)求響應(yīng)都使用encoding編碼。

forceEncoding=false 如果請(qǐng)求頭中包含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 中包含 三個(gè)屬性 encoding、forceRequestEncoding、forceResponseEncoding。

  • encoding:字符編碼類型
  • forceRequestEncoding:request 是否強(qiáng)制使用encoding編碼
  • forceResponseEncoding:response 是否強(qiáng)制使用encoding編碼

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

doFilterInternal() 方法

該方法是過(guò)濾器的核心方法。

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

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

request.getCharacterEncoding() 解析

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

getContentType() 方法

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

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

總結(jié)

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

相關(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開(kāi)發(fā)使用Cookie創(chuàng)建-獲取-持久化、自動(dòng)登錄、購(gòu)物記錄、作用路徑

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

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

    java隨機(jī)驗(yàn)證碼生成實(shí)現(xiàn)實(shí)例代碼

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

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

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

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

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

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

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

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

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

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

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

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

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

    Redis監(jiān)聽(tīng)過(guò)期的key實(shí)現(xiàn)流程詳解

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

最新評(píng)論

长宁区| 秭归县| 香格里拉县| 太湖县| 高州市| 揭西县| 九江县| 巴林左旗| 阿巴嘎旗| 琼中| 甘肃省| 宜良县| 郧西县| 柳河县| 阿克苏市| 会宁县| 丹棱县| 绥化市| 武定县| 高邮市| 乐山市| 沈阳市| 宁化县| 岐山县| 化德县| 桐庐县| 项城市| 昭觉县| 布拖县| 红原县| 贺州市| 阿勒泰市| 南涧| 晋中市| 刚察县| 额尔古纳市| 孟津县| 贵定县| 繁昌县| 漠河县| 岗巴县|