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

springmvc字符編碼過(guò)濾器CharacterEncodingFilter的使用

 更新時(shí)間:2021年08月12日 14:46:35   作者:lianjunzongsiling  
這篇文章主要介紹了springmvc字符編碼過(guò)濾器CharacterEncodingFilter的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。

字符編碼過(guò)濾器CharacterEncodingFilter

一、在web.xml中的配置

 <!-- characterEncodingFilter字符編碼過(guò)濾器 -->
 <filter>
  <filter-name>characterEncodingFilter</filter-name>
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  <init-param>
   <!--要使用的字符集,一般我們使用UTF-8(保險(xiǎn)起見(jiàn)UTF-8最好)-->
   <param-name>encoding</param-name>
   <param-value>UTF-8</param-value>
  </init-param>
  <init-param>
   <!--是否強(qiáng)制設(shè)置request的編碼為encoding,默認(rèn)false,不建議更改-->
   <param-name>forceRequestEncoding</param-name>
   <param-value>false</param-value>
  </init-param>
  <init-param>
   <!--是否強(qiáng)制設(shè)置response的編碼為encoding,建議設(shè)置為true,下面有關(guān)于這個(gè)參數(shù)的解釋-->
   <param-name>forceResponseEncoding</param-name>
   <param-value>true</param-value>
  </init-param>
 </filter>
 <filter-mapping>
  <filter-name>characterEncodingFilter</filter-name>
  <!--這里不能留空或者直接寫 ' / ' ,否者不起作用-->
  <url-pattern>/*</url-pattern>
 </filter-mapping>

二、CharacterEncodingFilter過(guò)濾器類淺析

打開(kāi)該類源碼,可以看到該類有三個(gè)類屬性

private String encoding; //要使用的字符集,一般我們使用UTF-8(保險(xiǎn)起見(jiàn)UTF-8最好)
private boolean forceRequestEncoding = false; //是否強(qiáng)制設(shè)置request的編碼為encoding
private boolean forceResponseEncoding = false; //是否強(qiáng)制設(shè)置response的編碼為encoding

主要方法只有一個(gè),也就是下面這個(gè),代碼邏輯很簡(jiǎn)單,如注釋所解釋

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        String encoding = getEncoding();
        if (encoding != null) { //如果設(shè)置了encoding的值,則根據(jù)情況設(shè)置request和response的編碼
         //若設(shè)置request強(qiáng)制編碼或request本身就沒(méi)有設(shè)置編碼
         //則設(shè)置編碼為encoding表示的值
            if (isForceRequestEncoding() || request.getCharacterEncoding() == null) { 
                request.setCharacterEncoding(encoding);
            }
         //若設(shè)置response強(qiáng)制編碼,則設(shè)置編碼為encoding表示的值
            if (isForceResponseEncoding()) { //請(qǐng)注意這行代碼,下面有額外提醒
                response.setCharacterEncoding(encoding);
            }
        }
        filterChain.doFilter(request, response);
    }
# 額外提醒
if (isForceResponseEncoding()) { 
 response.setCharacterEncoding(encoding);
}

是在

filterChain.doFilter(request, response);

之前執(zhí)行的,這也就是說(shuō)這段代碼的作用是設(shè)置response的默認(rèn)編碼方式,在之后的代碼里是可以根據(jù)需求設(shè)置為其他編碼的,即這里設(shè)置的編碼可能不是最終的編碼,網(wǎng)上很多文檔說(shuō)這里設(shè)置的是最終的編碼方式,這是錯(cuò)的。

SpringMVC配置字符編碼過(guò)濾器CharacterEncodingFilter來(lái)解決表單亂碼問(wèn)題

1、GET請(qǐng)求

針對(duì)GET請(qǐng)求,可以配置服務(wù)器Tomcat的conf\server.xml文件,在其第一個(gè)<Connector>標(biāo)簽中,添加URIEncoding="UTF-8"即可,如下所示:

<Connector URIEncoding="UTF-8" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

2、POST請(qǐng)求

但是,針對(duì)POST請(qǐng)求,僅配置Tomcat的server.xml文件中的<Connector標(biāo)簽不足以解決亂碼問(wèn)題,因此,需要利用Spring的字符編碼過(guò)濾器

org.springframework.web.filter.CharacterEncodingFilter

步驟:配置所開(kāi)發(fā)項(xiàng)目的web.xml文件,添加以下內(nèi)容至文件開(kāi)頭處即可:

<!-- ================start 配置spring的字符編碼過(guò)濾器================ -->    
    <filter>
        <!-- 解決post亂碼問(wèn)題需要配置spring編碼過(guò)濾器 -->
        <filter-name>characterEncoding</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>
    </filter>
    <filter-mapping>
        <filter-name>characterEncoding</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
<!-- ================end 配置spring的字符編碼過(guò)濾器================ -->

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java?精煉解讀數(shù)據(jù)結(jié)構(gòu)的鏈表的概念與實(shí)現(xiàn)

    Java?精煉解讀數(shù)據(jù)結(jié)構(gòu)的鏈表的概念與實(shí)現(xiàn)

    鏈表是一種物理存儲(chǔ)單元上非連續(xù)、非順序的存儲(chǔ)結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過(guò)鏈表中的指針連接次序?qū)崿F(xiàn)的,每一個(gè)鏈表都包含多個(gè)節(jié)點(diǎn),節(jié)點(diǎn)又包含兩個(gè)部分,一個(gè)是數(shù)據(jù)域,一個(gè)是引用域
    2022-03-03
  • 一文帶你了解SpringBoot的停機(jī)方式

    一文帶你了解SpringBoot的停機(jī)方式

    停機(jī)簡(jiǎn)單的說(shuō),就是向應(yīng)用進(jìn)程發(fā)出停止指令之后,能保證正在執(zhí)行的業(yè)務(wù)操作不受影響,直到操作運(yùn)行完畢之后再停止服務(wù)。本文就來(lái)和大家聊聊Springboot的停機(jī)方式與停機(jī)處理
    2023-02-02
  • Java AES加密和解密教程

    Java AES加密和解密教程

    這篇文章主要介紹了Java AES加密和解密的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-12-12
  • Spring?MVC中的攔截器案例演示

    Spring?MVC中的攔截器案例演示

    攔截器可以攔截所有的請(qǐng)求,也可以只攔截滿足指定的請(qǐng)求,?Spring?MVC?的攔截器類似于過(guò)濾器,用來(lái)執(zhí)行預(yù)處理和后處理操作,本文給大家介紹Spring?MVC中的攔截器案例演示,感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • Java基礎(chǔ)教程之包(package)

    Java基礎(chǔ)教程之包(package)

    這篇文章主要介紹了Java基礎(chǔ)教程之包(package),本文詳細(xì)講解了包的創(chuàng)建、使用等方法,需要的朋友可以參考下
    2014-08-08
  • 比較排序之冒泡排序的實(shí)現(xiàn)

    比較排序之冒泡排序的實(shí)現(xiàn)

    下面小編就為大家?guī)?lái)一篇比較排序之冒泡排序的小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧實(shí)現(xiàn)。
    2017-06-06
  • java創(chuàng)建線程池的7種實(shí)現(xiàn)方法

    java創(chuàng)建線程池的7種實(shí)現(xiàn)方法

    在Java中線程池是一種管理線程的機(jī)制,它可以創(chuàng)建一組線程并重復(fù)使用它們,避免了創(chuàng)建和銷毀線程的開(kāi)銷,這篇文章主要給大家介紹了關(guān)于java創(chuàng)建線程池的7種實(shí)現(xiàn)方法,需要的朋友可以參考下
    2023-10-10
  • SpringBoot 多環(huán)境配置和啟動(dòng)詳解

    SpringBoot 多環(huán)境配置和啟動(dòng)詳解

    這篇文章主要為大家介紹了SpringBoot多環(huán)境配置和啟動(dòng)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • MyBatis?Plus?導(dǎo)入IdType失敗的解決

    MyBatis?Plus?導(dǎo)入IdType失敗的解決

    這篇文章主要介紹了MyBatis?Plus?導(dǎo)入IdType失敗的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • SpringBoot中的HATEOAS詳情

    SpringBoot中的HATEOAS詳情

    這篇文章主要介紹了SpringBoot中的HATEOAS詳情,SpringBoot提供了HATEOAS的便捷使用方式,文章圍繞主題展開(kāi)詳細(xì)介紹內(nèi)容,需要的小伙伴可以參考一下
    2022-05-05

最新評(píng)論