首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

request.getParameter()获取不到数据的有关问题

2012-06-30 
request.getParameter()获取不到数据的问题最近做项目时,发现手机客户端通过http协议post方式上传数据到服

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报文中的内容是:

POST /post_test.php?t=1 HTTP/1.1Accept-Language: zh-CNUser-Agent: Mozilla/4.0  Content-Type: multipart/form-data; boundary=---------------------------7dbf514701e8Accept-Encoding: gzip, deflateHost: 192.168.12.102Content-Length: 345Connection: Keep-AliveCache-Control: no-cache -----------------------------7dbf514701e8Content-Disposition: form-data; name="title"test-----------------------------7dbf514701e8Content-Disposition: form-data; name="content"....-----------------------------7dbf514701e8Content-Disposition: form-data; name="submit"post article-----------------------------7dbf514701e8--

如果以这种方式提交数据就要用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()在同一个响应中是不能混合使用的,如果混合使用会抛异常的。

?

?

?

热点排行