Tomcat 的 Request.getParameter 是懶解析
本文僅討論沒有使用 Spring 框架的原生開發,Spring 包含字元編碼過濾器,不存在本文提及的編碼問題。
通常,我們呼叫 Request.getParameter 方法獲取請求引數;
但當獲取請求體(body)的引數值時一般都是亂碼,因為 Tomcat 解析 body 的預設編碼是 ISO 8895-1。
而且,改變解析 body 的編碼需要在 getParameter 之前呼叫 Request.setCharacterEncoding。
看如下原始碼,注意到倒數第三行最後,this.request.getParameter(name)
public String getParameter(String name) {
if (this.request == null) {
throw new IllegalStateException(sm.getString("requestFacade.nullRequest"));
} else {
return Globals.IS_SECURITY_ENABLED ? (String) AccessController.doPrivileged(new RequestFacade.GetParameterPrivilegedAction(name)) : this.request.getParameter(name);
}
}
繼續看方法,先判斷 this.parametersParsed,這個 boolean 值看名字就明白,判斷引數是否被解析,如果沒有被解析,則解析。
解析引數的方法很長,有興趣的自己看。所以說,需要先設定編碼,否則你一旦呼叫 getParameter,再設定編碼已經無效,因為引數已經解析完畢。
相關文章
- 懶 Redis 是更好的 RedisRedis
- Flutter JSON 解析懶人攻略FlutterJSON
- tomcat架構解析Tomcat架構
- tomcat目錄解析Tomcat
- 程式設計師如何偷懶?偷懶是一種至高境界程式設計師
- [愛偷懶的程式設計師系列]-Section 1. “懶”是一切需求的根源程式設計師
- request.getParameter()與request.setAttribute()的區別(轉)
- Tomcat是如何載入類的Tomcat
- Tomcat的啟停指令碼原始碼解析Tomcat指令碼原始碼
- JAVA TOMCAT域名解析配置JavaTomcat
- Tomcat目錄結構解析Tomcat
- 高效的程式設計師是聰明和懶惰的程式設計師
- request.getParameter("name")什麼時候獲取的引數是null,什麼時候為""空字串Null字串
- 偷懶是程式設計師的一種至高境界程式設計師
- ViewPager+TabLayout+Fragment懶載入機制完全解析ViewpagerTabLayoutFragment
- 什麼是hibernate懶載入?什麼時候用懶載入?為什麼要用懶載入?(轉)
- 你的程式設計師是在努力工作還是在偷懶?程式設計師
- Tomcat部署解析及配置優化Tomcat優化
- 什麼是DNS解析?DNS解析的過程是什麼樣的?DNS
- 域名解析的原理是什麼?域名解析的流程是怎樣的?
- 認知偏差:懶惰其實是不存在的 - Devon Pricedev
- 愛偷懶的程式設計師是好程式設計師程式設計師
- Tomcat 6 --- 使用Jasper引擎解析JSPTomcatJS
- Tomcat啟動過程(二):EndPoint解析Tomcat
- 什麼是Tomcat? 如何在IDEA中配置Tomcat?TomcatIdea
- SAP Fiori裡的List是如何做到懶載入Lazy load的
- “懶”的妙用——淺析圖片懶載入技術
- Tomcat中的容器是如何處理請求的Tomcat
- Spring的問題,還是Tomcat的問題SpringTomcat
- Vue 的懶載入Vue
- ACM 懶省事的小明ACM
- Tomcat長輪詢原理與原始碼解析Tomcat原始碼
- 你是一名努力工作的程式設計師,還是懶惰的程式設計師?程式設計師
- 對程式設計師來說 懶是一種值得稱頌的美德程式設計師
- SpringBoot原始碼解析-內嵌Tomcat容器的啟動Spring Boot原始碼Tomcat
- Spring Boot中Tomcat是怎麼啟動的Spring BootTomcat
- Tomcat在SpringBoot中是如何啟動的TomcatSpring Boot
- 檢視 tomcat是32位或是64位的版本Tomcat