亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

通過(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,話(huà)不多說(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:字符編碼類(lèi)型
  • 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()是否有值,如果有值則使用客戶(hù)端傳過(guò)來(lái)的編碼(例如:charset=utf-8

request.getCharacterEncoding() 解析

request中獲取encoding,追蹤org.apache.coyoteRequest.java類(lèi)中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如何獲取接口所有的實(shí)現(xiàn)類(lèi)

    Java如何獲取接口所有的實(shí)現(xiàn)類(lèi)

    這篇文章主要介紹了Java如何獲取接口所有的實(shí)現(xiàn)類(lèi),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Java多態(tài)的全面系統(tǒng)解析

    Java多態(tài)的全面系統(tǒng)解析

    多態(tài)就是指程序中定義的引用變量所指向的具體類(lèi)型和通過(guò)該引用變量發(fā)出的方法調(diào)用在編程時(shí)并不確定,而是在程序運(yùn)行期間才確定,即一個(gè)引用變量到底會(huì)指向哪個(gè)類(lèi)的實(shí)例對(duì)象,該引用變量發(fā)出的方法調(diào)用到底是哪個(gè)類(lèi)中實(shí)現(xiàn)的方法,必須在由程序運(yùn)行期間才能決定
    2022-03-03
  • Java泛型類(lèi)型通配符和C#對(duì)比分析

    Java泛型類(lèi)型通配符和C#對(duì)比分析

    下面小編就為大家?guī)?lái)一篇Java泛型類(lèi)型通配符和C#對(duì)比分析。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-10-10
  • IDEA檢查項(xiàng)目的jdk版本需要看的地方

    IDEA檢查項(xiàng)目的jdk版本需要看的地方

    這篇文章主要介紹了IDEA檢查項(xiàng)目的jdk版本需要看的地方,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • java中sdk與jdk的區(qū)別詳細(xì)解析

    java中sdk與jdk的區(qū)別詳細(xì)解析

    以下是對(duì)java中sdk與jdk的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下
    2013-08-08
  • PowerJob的ServerDiscoveryService工作流程源碼解讀

    PowerJob的ServerDiscoveryService工作流程源碼解讀

    這篇文章主要為大家介紹了PowerJob的ServerDiscoveryService工作流程源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • JProfiler11使用教程之JVM調(diào)優(yōu)問(wèn)題小結(jié)

    JProfiler11使用教程之JVM調(diào)優(yōu)問(wèn)題小結(jié)

    這篇文章主要介紹了JProfiler11使用教程之JVM調(diào)優(yōu),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • SpringCloud中的Eureka集群配置方法

    SpringCloud中的Eureka集群配置方法

    這篇文章主要介紹了SpringCloud中的Eureka集群配置,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • Spring Boot 2.0.0 終于正式發(fā)布-重大修訂版本

    Spring Boot 2.0.0 終于正式發(fā)布-重大修訂版本

    北京時(shí)間 2018 年 3 月 1 日早上,如約發(fā)布的 Spring Boot 2.0 在同步至 Maven 倉(cāng)庫(kù)時(shí)出現(xiàn)問(wèn)題,導(dǎo)致在 GitHub 上發(fā)布的 v2.0.0.RELEASE 被撤回
    2018-03-03
  • springboot3.x中Jakarta包無(wú)法引入的問(wèn)題

    springboot3.x中Jakarta包無(wú)法引入的問(wèn)題

    最近想將一些項(xiàng)目升級(jí)到springboot3.x和java17的時(shí)候,發(fā)現(xiàn)項(xiàng)目依賴(lài)中有Jakarta的包,但是代碼標(biāo)紅提示沒(méi)有相關(guān)的類(lèi),本文就來(lái)介紹一下解決方法,感興趣的可以了解一下
    2024-02-02

最新評(píng)論