詳解Spring中的CharacterEncodingFilter--forceEncoding為true在java程式碼中設定失效--html設定編碼無效?不知真假
<span style="font-size:14px;color:#ff0000;"><strong>失效--html設定編碼無效?不知真假--
肯定是假的了
web配置 utf8,jsp頁面配置gbk,部署頁面編碼是utf-8程式碼並不亂碼,有時說的並不一定對</strong></span>
原創作品,允許轉載,轉載時請務必以超連結形式標明文章 原始出處、作者資訊和本宣告。否則將追究法律責任。
本文連結:http://blog.sina.com.cn/s/blog_92b93d6f0100ypp9.html
在專案中有很多讓人頭疼的問題,其中,編碼問題位列其一,那麼在Spring框架中是如何解決從頁面傳來的字串的編碼問題的呢?下面我們來看看Spring框架給我們提供過濾器CharacterEncodingFilter
1.看清結構:
可以看到其繼承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中配置:
<filter>
<filter-name>encodingFilter</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>
其中encoding用來設定編碼格式,forceEncoding用來設定是否理會 request.getCharacterEncoding()方法,設定為true則強制覆蓋之前的編碼格式。
4.原始碼賞析
當Servlet容器啟動的時候,會讀取web.xml中對於過濾器的配置資訊, 讀取到<init-param>中的子標籤<param-name>encoding和forceEncoding所對應的<param-value>的值,再通過呼叫該類setEncoding(String encoding)和setForceEncoding(boolean forceEncoding) 將值注入到這連個欄位中。
在這裡就能看到為什麼設定foreEncoding為true會覆蓋掉request.getCharacterEncoding()中的方法了吧,呵呵,還是那句話,原始碼之前了無祕密,只有深入到原始碼之中才能看清本質。
相關文章
- 在Eclipse下編寫HTML/CSS/JS/JSP/Java程式碼時,程式碼自動提示的相關設定EclipseHTMLCSSJSJava
- 【程式設計素質】Java編碼約定程式設計Java
- 在CMakeLists.txt中設定版本號,並在程式碼中呼叫
- vue中設定height:100%無效的問題Vue
- Java設定JSON字串引數編碼JavaJSON字串
- Job 類中 $timeout 設定無效 ? - 已關閉
- 短視訊平臺原始碼,Android中 TextView設定顏色無效的問題原始碼AndroidTextView
- 如何解決html設定height:100%無效的問題?HTML
- MyEclipse設定文字編碼Eclipse
- Spring Security 5中的預設密碼編碼器Spring密碼
- Ubuntu 下設定中文編碼Ubuntu
- MySQL字元編碼設定方法MySql字元
- Pycharm程式碼塊的設定PyCharm
- 設計模式及其在spring中的應用(含程式碼)設計模式Spring
- 解決virtualbox虛擬機器設定nat網路提示無效設定虛擬機
- RadioGroup 在TS schema 中的設定
- 自定義滑鼠設定-中鍵設定為後退
- php匯入時設定不同的編碼PHP
- mysql5.7.22設定中文編碼-解決亂碼問題LinuxMySqlLinux
- Java 程式碼本地設定Hadoop使用者名稱密碼JavaHadoop密碼
- Python程式設計:URL網址連結中的中文編碼與解碼Python程式設計
- Windows下CMD和Tomcat設定編碼為UTF-8WindowsTomcat
- solaris中如何設定解析度?在solaris中設定解析度的方法教程
- go 程式碼倉被設定為私倉了,無法go get -u 獲取最新的倉程式碼Go
- IDEA如何設定編碼格式,字元編碼,全域性編碼和專案編碼格式Idea字元
- 在word中怎麼設定目錄 word設定目錄的方法
- and-design-vue設定dropdownClassName無效的問題Vue
- laravel8 時區設定無效解決辦法Laravel
- 電腦怎麼設定密碼鎖屏 電腦設定密碼鎖屏的詳細教程密碼
- android -- EditText 設定 imeOptions 屬性為何失效?Android
- android — EditText 設定 imeOptions 屬性為何失效?Android
- Java中的設計模式詳解Java設計模式
- Java網路程式設計與NIO詳解11:Tomcat中的Connector原始碼分析(NIO)Java程式設計Tomcat原始碼
- win10系統下如何在word任意頁尾設定頁碼_win10在word中設定頁尾頁碼的方法Win10
- HTML 中塊級元素設定 height:100% 的實現HTML
- VirtualBox虛擬機器遠端桌面連線設定詳解(包含登入密碼設定)虛擬機密碼
- Windows CMD永久設定UTF-8編碼Windows
- ios10以下safari設定style無效iOS
- JavaScript 設定Cookie過期時間無效JavaScriptCookie