中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

Spring中的CharacterEncodingFilter怎么配置

發布時間:2021-12-21 17:34:22 來源:億速云 閱讀:422 作者:iii 欄目:開發技術

本篇內容介紹了“Spring中的CharacterEncodingFilter怎么配置”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

spring的配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="            http://java.sun.com/xml/ns/javaee
            http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">
    <!-- 讓spring隨web啟動而創建的監聽器 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <!-- 配置spring配置文件位置參數
    application.xml :對應的是系統級別的配置,作用范圍是系統上下文-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>
   <!-- spring-servlet.xml:對應的是 controller 級別的配置,作用范圍是控制層上下文-->
    <servlet>
        <servlet-name>mybatis</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:mybatis-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup><!--大于0 表示容器在啟動的時候就加載這個servlet-->
    </servlet>
    <servlet-mapping>
        <servlet-name>mybatis</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    
<!--防止亂碼  過濾器   CharacterEncodingFilter繼承GenericFilterBean和OncePerRequestFilter,也就是說,這個過濾器就是針對于每次瀏覽器請求進行過濾的,然后再其之上添加了父類沒有的功能即處理字符編碼。
其中encoding用來設置編碼格式,forceEncoding用來設置是否理會 request.getCharacterEncoding()方法,設置為true則強制覆蓋之前的編碼格式。-->
    <filter>
        <filter-name>SpringEncodingFilter</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>SpringEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

在項目中有很多讓人頭疼的問題,其中,編碼問題位列其一,那么在Spring框架中是如何解決從頁面傳來的字符串的編碼問題的呢?下面我們來看看Spring框架給我們提供過濾器CharacterEncodingFilter

1.看清結構:


Spring中的CharacterEncodingFilter怎么配置
 
 
可以看到其繼承GenericFilterBean和OncePerRequestFilter,也就是說,這個過濾器就是針對于每次瀏覽器請求進行過濾的,然后再其之上添加了父類沒有的功能即處理字符編碼。

2.官方解釋:

Servlet 2.3/2.4 Filter that allows one to specify a character encoding for requests. This is useful because current browsers typically do not set a character encoding even if specified in the HTML page or form. (這句話就說你在html頁面或表單中設置編碼是沒有用的)

This filter can either apply its encoding if the request does not already specify an encoding, or enforce this filter's encoding in any case ("forceEncoding"="true").(只要你設置了foreEncoding=true,則在代碼中設置編碼格式沒用,)In the latter case, the encoding will also be applied as default response encoding on Servlet 2.4+ containers (although this will usually be overridden by a full content type set in the view).

3.如何使用

下面來看看如何在web.xml中配置:

  1. <filter>  

  2.  <filter-name>encodingFilter</filter-name>  

  3.  <filter-class>org.springframework.web.filter.CharacterEncodingFilter  

  4.    

  5. </filter-class>  

  6.  <init-param>  

  7.  <param-name>encoding</param-name>  

  8.  <param-value>UTF-8</param-value>  

  9.  </init-param>  

  10.  <init-param>  

  11.  <param-name>forceEncoding</param-name>  

  12.  <param-value>true</param-value>  

  13.  </init-param>  

  14.  </filter>  

 

其中encoding用來設置編碼格式,forceEncoding用來設置是否理會 request.getCharacterEncoding()方法,設置為true則強制覆蓋之前的編碼格式。

4.源碼賞析


Spring中的CharacterEncodingFilter怎么配置
 

當Servlet容器啟動的時候,會讀取web.xml中對于過濾器的配置信息, 讀取到<init-param>中的子標簽<param-name>encoding和forceEncoding所對應的<param-value>的值,再通過調用該類setEncoding ( String  encoding)和 setForceEncoding (boolean forceEncoding) 將值注入到這連個字段中。

Spring中的CharacterEncodingFilter怎么配置
 

在這里就能看到為什么設置foreEncoding為true會覆蓋掉request.getCharacterEncoding()中的方法了吧,呵呵,源碼之前了無秘密,只有深入到源代碼之中才能看清本質。

    1. <?xml version="1.0" encoding="UTF-8"?>  

    2. <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"  

    3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  

    4.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   

    5.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  

    6.     <filter>  

    7.         <filter-name>EncodingFilter</filter-name>  

    8.         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  

    9.         <init-param>  

    10.             <param-name>encoding</param-name>  

    11.             <param-value>UTF-8</param-value>  

    12.         </init-param>  

    13.     </filter>  

    14.     <filter-mapping>  

    15.         <filter-name>EncodingFilter</filter-name>  

    16.         <url-pattern>/*</url-pattern>  

    17.     </filter-mapping>  

    18. </web-app>  

“Spring中的CharacterEncodingFilter怎么配置”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

姚安县| 固原市| 会同县| 山东省| 厦门市| 上高县| 宁阳县| 溧阳市| 时尚| 六枝特区| 罗山县| 吉林省| 惠水县| 霍林郭勒市| 新津县| 东港市| 龙门县| 大厂| 介休市| 威海市| 柳江县| 蓝田县| 阿城市| 漳州市| 凤凰县| 凤山县| 宁陵县| 汝城县| 长兴县| 杭锦旗| 寻甸| 岗巴县| 姚安县| 南部县| 崇信县| 廉江市| 根河市| 六盘水市| 安溪县| 广灵县| 海南省|