1. 程式人生 > >request.getParameter()獲取不到資料的問題

request.getParameter()獲取不到資料的問題

在我們做專案時有時會發現:客戶端通過http協議post方式上傳資料到服務端,

在伺服器端通過request.getInputStream()能獲取到相應的資料,但用request.getParameter()卻獲取不到資料。

這是怎麼回事呢?

這種情況跟form表單的屬性 enctype有關係。

HTML中的form表單有一個關鍵屬性 enctype=application/x-www-form-urlencoded 或multipart/form-data。

1、enctype="application/x-www-form-urlencoded"是預設的編碼方式,當以這種方式提交資料時,HTTP報文中的內容是:

<span style="font-size: small;">POST /post_test.php HTTP/1.1 
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 
Content-Type: application/x-www-form-urlencoded 
Host: 192.168.12.102
Content-Length: 42
Connection: Keep-Alive
Cache-Control: no-cache
 
title=test&content=%B3%AC%BC%B6%C5%AE%C9%FA&submit=post+article 
</span>
Servlet的API提供了對這種編碼方式解碼的支援,只需要呼叫ServletRequest 類中的getParameter()方法就可以得到表單中提交的資料。

2、在傳輸大資料量的二進位制資料時,必須將編碼方式設定成enctype="multipart/form-data",當以這種方式提交資料時,HTTP報文中的內容是:

<span style="font-size: small;">POST /post_test.php?t=1 HTTP/1.1
Accept-Language: zh-CN
User-Agent: Mozilla/4.0  
Content-Type: multipart/form-data; boundary=---------------------------7dbf514701e8
Accept-Encoding: gzip, deflate
Host: 192.168.12.102
Content-Length: 345
Connection: Keep-Alive
Cache-Control: no-cache
 
-----------------------------7dbf514701e8
Content-Disposition: form-data; name="title"
test
-----------------------------7dbf514701e8
Content-Disposition: form-data; name="content"
....
-----------------------------7dbf514701e8
Content-Disposition: form-data; name="submit"
post article
-----------------------------7dbf514701e8--</span>

如果以這種方式提交資料就要用request.getInputStream()或request.getReader()來獲取提交的資料 用 request.getParameter()是獲取不到提交的資料的。

3、注意request.getParameter()、request.getInputStream()、request.getReader()這三種方法是有衝突的

因為流只能被讀一次,

比如: 當form表單內容採用enctype=application/x-www-form-urlencoded編碼時,

先通過呼叫request.getParameter()方法獲取資料後,再呼叫request.getInputStream()或request.getReader()已經獲取不到流中的內容了,

因為在呼叫 request.getParameter()時系統可能對錶單中提交的資料以流的形式讀了一次,反之亦然。

當form表單內容採用enctype=multipart/form-data編碼時,呼叫request.getParameter()獲取不到資料,

即使已經呼叫了request.getParameter()方法也可以再通過呼叫request.getInputStream()或request.getReader()獲取表單中的資料,

但request.getInputStream()和request.getReader()在同一個響應中是不能混合使用的,如果混合使用會拋異常的。



相關推薦

request.getParameter()獲取資料的問題

在我們做專案時有時會發現:客戶端通過http協議post方式上傳資料到服務端, 在伺服器端通過request.getInputStream()能獲取到相應的資料,但用request.getParameter()卻獲取不到資料。 這是怎麼回事呢? 這種情況跟form表

jsp的request.getParameter獲取到表單引數

[b]可能原因:[/b]1: form表單中的控制元件沒有定義name屬性2: form表單中的控制元件被設定成disabled3: form表單的enctype="multipart/form-data"是一種用於上傳檔案的表單[b]解決方法:[/b]對於第三種情況我們直接

解決當FORM的ENCTYPE="multipart/form-data" 時request.getParameter()獲取到值的方法

今天在原來上傳檔案頁面的基礎上,想新增一段檔案的簡介 因為同時要上傳檔案,所以ENCTYPE="multipart/form-data" 必須要加在form裡面 可是這樣的話,我再servlet裡面用request.getParameter()方法無論如何都只是獲得null值

解決當FORM的ENCTYPE="multipart/form-data" 時request.getParameter()獲取到值的問題

今天在原來上傳檔案頁面的基礎上,想新增一段檔案的簡介 因為同時要上傳檔案,所以ENCTYPE="multipart/form-data" 必須要加在form裡面 可是這樣的話,我再servlet裡面用request.getParameter()方法無論如何都只是獲得null

jquery通過ajax-json訪問java後臺傳遞引數,通過request.getParameter獲取到引數的說明

Java後臺伺服器是apache-tomcat-6.0.37 正常的post請求(不包括ajax請求)在http頭中的content-type為application/x-www-form-urlencoded,這時在java後臺可以通過request.getPara

前端XMLHttpRequest 傳送請求 FormData後臺接收資料,request.getParameter(),獲取資料為null

var form = new FormData(); form.append("fName",$("#fName").val()); form.append("fPrice",$("#fPrice").val()); form.appe

SSL 認證之後,request.getScheme()獲取到https的問題記錄

接受 col 輸入 response ack spa bsp 獲取 使用 通過瀏覽器輸入https://www.xxx.com,request.getScheme()獲取到的確實http而不是https 通過request.getRequestURL()拿到的也是http

【轉】遇到request.getParameter()獲取空值

轉載網址:https://blog.csdn.net/iriszx999/article/details/75585052?utm_source=blogxgwz1 說白了就是pageEncoding和charset的用法不同,以下是它們的區別: pageEncoding表示這個頁面接收到引數以

Springboot中request.getInputStream()獲取到流解決辦法

問題描述 使用Springboot整合wpsoffice線上編輯儲存時獲取不到流。在Springboot程式啟動後,會預設新增OrderedCharacterEncodingFilter和HiddenHttpMethodFilter過濾器。在HiddenHttpMe

postman傳送post請求,用request.getParameter()獲取請求引數注意事項

後臺springMVC用request.getParameter()獲取請求引數的話,在postman傳送請求時,body選取x-www-form-urlencoded,Headers部分是key: Content-Type----------value: applicati

json傳遞中文亂碼解決方法以及解決request.getParameter()獲取引數為亂碼的問題

response.setContentType("text/json"); //類似返回值的話用“text/html”等response.setCharacterEncoding("UTF-8");//設定字符集為'UTF-8' 解決request.getPara

Django的request.POST獲取到內容的原因

我通過如下的一段程式傳送post請求: import urllib3 pool = urllib3.connection_from_url('http://127.0.0.1:8090') res

使用request.getInputStream() 獲取POST資料

InputStream is = request.getInputStream(); DataInputStream input = new DataInputStream(is); String str =input.readUTF(); 分離引數方法 public String splitStri

使用SmartUpload上傳檔案時getparameter獲取到值

使用SmartUpload上傳檔案時會在form中新增 ENCTYPE="multipart/form-data"  這會使getparameter獲取不到值,所以可以這樣解決 SmartUpload su = new SmartUpload();try {  //上傳初始

使用postman請求springmvc介面時,request獲取資料

http://www.cnblogs.com/softidea/p/6125087.html http://blog.csdn.net/ye1992/article/details/49998511 原因為當postman中選擇form-data(用於上傳檔案的)時,則

ajax傳JSON時設置的contenttype導致JAVA中request.getParameter("")怎麽也接收到數據

然而 htm 默認 數據 .com bsp quest 怎麽 blog ajax傳JSON時設置的contenttype默認值是application/x-www-form-urlencoded, 當ajax傳JSON時設置的contenttype 如果是applicati

request.getParameter(String arg0)獲取的字串為空或者是空串問題小白分析

1.request.getParameter(String arg0)獲得字串為空             1).引數與name屬性的屬性值不匹配         &

Spring MVC獲取到post提交的multipart/form-data格式的資料

我們在寫介面時,經常會用postman測試介面。前段時間我寫介面時,發現post的form-data提交資料,後端竟然接收不到請求引數,而使用post的x-www-form-urlencoded方式提交資料,後端可以接收到引數。為什麼? postman的form-data是指mult

jmeter: JDBC Request (查詢資料庫獲取資料庫資料) 的使用

以mysql資料庫為例  需準備的:資料庫的使用者名稱為root(你自己的使用者名稱),使用者名稱密碼為*********(你自己的密碼) 1,配置 JDBC Connection Configuration 重要引數說明: Variable Name:資料庫

request獲取post的json物件資料content-type=“text/plain”

/** *獲取 request 中用POST方式"Content-type"是 * "text/plain"傳送的 json資料 * @author: Simon * @date: 2017年8月6日 下午7:44:09 * @param request * @r