request.getParameter()獲取不到數據


HTML中的form表單有一個關鍵屬性 Content-Typeapplication/x-www-form-urlencoded multipart/form-data

 

1 Content-Type="application/x-www-form-urlencoded"是默認的編碼方式,當以這種方式提交數據時,HTTP報文中的內容是:

Accept:*/*

Accept-Encoding:gzip, deflate, br

Accept-Language:zh-CN,zh;q=0.9,en;q=0.8

Connection:keep-alive

Content-Length:36

Content-Type:application/x-www-form-urlencoded; charset=UTF-8

Cookie:JSESSIONID=BEFE08D4761E2CED0B93D84CEED8DA73; JSESSIONID=121B641B71B923F88DBA9BCDBC541FA5; XSRF-TOKEN=5f79508e834371a1b14fd13ef5b58ed2

Host:10.64.103.106:8443

Origin:https://10.64.103.106:8443

Referer:https://10.64.103.106:8443/OPMUI/jsp/secospace/index.jsp?lang=zh_CN

User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36

X-Requested-With:XMLHttpRequest

X-XSRF-TOKEN:5f79508e834371a1b14fd13ef5b58ed2

 

title=test&content=%B3%AC%BC%B6%C5%AE%C9%FA&submit=post+article

 

ServletAPI提供了對這種編碼方式解碼的支持,只需要調用ServletRequest 類中的getParameter()方法就可以得到表單中提交的數據。

 

 

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

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8

Accept-Encoding:gzip, deflate, br

Accept-Language:zh-CN,zh;q=0.9,en;q=0.8

Cache-Control:max-age=0

Connection:keep-alive

Content-Length:1308

Content-Type:multipart/form-data; boundary=----WebKitFormBoundarybTh8eYefb4cLKAqx

Cookie:JSESSIONID=BEFE08D4761E2CED0B93D84CEED8DA73; JSESSIONID=121B641B71B923F88DBA9BCDBC541FA5; XSRF-TOKEN=5f79508e834371a1b14fd13ef5b58ed2

Host:10.64.103.106:8443

Origin:https://10.64.103.106:8443

Referer:https://10.64.103.106:8443/OPMUI/jsp/secospace/index.jsp?lang=zh_CN

Upgrade-Insecure-Requests:1

User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36

 

------WebKitFormBoundarybTh8eYefb4cLKAqx

Content-Disposition: form-data; name="vlanPath"

 

/OPMUI/cxfservices/vlan/vlanPolicyManagerService/accessvlanpools

------WebKitFormBoundarybTh8eYefb4cLKAqx

Content-Disposition: form-data; name="vlanUpload"; filename=""

Content-Type: application/octet-stream

 

 

------WebKitFormBoundarybTh8eYefb4cLKAqx

Content-Disposition: form-data; name="vlanUserName"

 

admin

------WebKitFormBoundarybTh8eYefb4cLKAqx

 

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

 

最后注意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()在同一個響應中是不能混合使用的,如果混合使用會拋異常的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM