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,再設定編碼已經無效,因為引數已經解析完畢。
相關文章
- Flutter JSON 解析懶人攻略FlutterJSON
- tomcat架構解析Tomcat架構
- Tomcat目錄結構解析Tomcat
- JAVA TOMCAT域名解析配置JavaTomcat
- Tomcat的啟停指令碼原始碼解析Tomcat指令碼原始碼
- Tomcat是如何載入類的Tomcat
- Tomcat部署解析及配置優化Tomcat優化
- [愛偷懶的程式設計師系列]-Section 1. “懶”是一切需求的根源程式設計師
- SpringBootApplication是如何啟動Tomcat的? | 破解SpringBoot Tomcat啟動之謎 !Spring BootAPPTomcat
- 什麼是Tomcat? 如何在IDEA中配置Tomcat?TomcatIdea
- 「懶」是第一生產力
- SpringBoot原始碼解析-內嵌Tomcat容器的啟動Spring Boot原始碼Tomcat
- Tomcat在SpringBoot中是如何啟動的TomcatSpring Boot
- Tomcat長輪詢原理與原始碼解析Tomcat原始碼
- Tomcat中的容器是如何處理請求的Tomcat
- Spring Boot中Tomcat是怎麼啟動的Spring BootTomcat
- 什麼是DNS解析?DNS解析的過程是什麼樣的?DNS
- SAP Fiori裡的List是如何做到懶載入Lazy load的
- 域名解析的原理是什麼?域名解析的流程是怎樣的?
- 認知偏差:懶惰其實是不存在的 - Devon Pricedev
- tomcat原始碼分析(第三篇 tomcat請求原理解析--Connector原始碼分析)Tomcat原始碼
- 能自動絕不手動,這是懶? 不,這是進步!
- Vue 的懶載入Vue
- 曹工說Tomcat1:從XML解析說起TomcatXML
- JSP中String a = request.getParameter(“ “),判斷a是否為null或空的問題JSNull
- 在Linux中,tomcat和nginx的區別是什麼?LinuxTomcatNginx
- 懶書
- tomcat原始碼分析(第四篇 tomcat請求處理原理解析--Container原始碼分析)Tomcat原始碼AI
- Tomcat是如何執行的?整體架構又是怎樣的?Tomcat架構
- 什麼是Tomcat?用最簡單的語言描述它Tomcat
- 還是Tomcat,關於類載入器的趣味實驗Tomcat
- SpringBoot是如何解析引數的Spring Boot
- DNS解析順序是怎樣的?DNS
- 遞迴解析和權威解析的區別是什麼?遞迴
- Tomcat 架構原理解析到架構設計借鑑Tomcat架構
- 無事(懶)
- 懶人之家
- 懶載入