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 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
Servlet的API提供了对这种编码方式解码的支持,只需要调用ServletRequest 类中的getParameter()方法就可以得到表单中提交的数据。
2、在传输大数据量的二进制数据时,必须将编码方式设置成enctype="multipart/form-data",当以这种方式提交数据时,HTTP报文中的内容是:
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--
如果以这种方式提交数据就要用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()在同一个响应中是不能混合使用的,如果混合使用会抛异常的。
request.getParameter()获取不到数据的问题的更多相关文章
- request.getParameter()获取不到数据
HTML中的form表单有一个关键属性 Content-Type=application/x-www-form-urlencoded 或multipart/form-data. 1. Content- ...
- ajax post 请求 ,java端使用 request.getParameter 获取不到数据问题
js端 $.ajax({ type:'POST', data:{a:1}, url:_this.apiUrl+url, dataType:'json',//使用jsonp方式请求 contentTyp ...
- servlet 表单加上multipart/form-data后request.getParameter获取NULL(已解决)
先上结论(可能不对,因为这是根据实践猜测而来,欢迎指正) 表单改为multipart/form-data传值后,数据就不能通过普通的request.getParameter获取. 文件和文件名通过Fi ...
- request.getparameter() 获取中文出现乱码 问题
http请求是以ISO-8859-1的编码来传送url的 如果页面的content-type为utf-8,那么在发送请求时,会将字符转成utf-8后进行传送 如: 中 的UTF-8编码为:E4 B8 ...
- setCharacterEncoding 是在request.getParameter获取参数之前 设置request的编码格式 一步到位
setCharacterEncoding 是在request.getParameter获取参数之前 设置request的编码格式 一步到位
- request.getParameter()获取URL中文参数乱码的解决办法
这个问题耽误好长时间,URL传中文参数出现乱码,就算首次使用request接收就添加 request.setCharacterEncoding("UTf-8"); 依然报错不误. ...
- 解决当FORM的ENCTYPE="multipart/form-data" 时request.getParameter()获取不到值的方法
部分转载于: http://blog.csdn.net/georgejin/article/details/1706647 http://www.cnblogs.com/loveyunk/p/6089 ...
- 过滤器中处理multipart/form-data头部的post请求request.getParameter(")获取不到参数问题
如果不是文件类型请求,我们使用request.getParameter("");方法是可以获取到参数内容的,如果是文件类型的请求即请求的头部信息为“multipart/form-d ...
- jquery通过ajax-json访问java后台传递参数,通过request.getParameter获取不到参数的说明
http://m.blog.csdn.net/blog/eyebrother/36007145 所以当后台通过request.getParameter("name");对参数值的作 ...
随机推荐
- excel提取数字
部分提取,那么就用=-LOOKUP(,-MID(A1,MIN(FIND({0;1;2;3;4;5;6;7;8;9},A1&1234567890)),ROW($1:$1024))) ------ ...
- .NET 一次读取几百条数据优化,从原来30分钟优化到30秒
1.全部数据读取到内存, 不要使用string,而是使用stringbuilder,stringbuilder的效率非常高 2.添加到数据库 不要使用excute,而是使用事务,几百万条数据会请求数据 ...
- Listener(Web监听器、活化、钝化)
Web监听器 总共有8个 划分成三种类型 定义一个类,实现接口 注册 | 配置监听器 监听三个作用域创建和销毁 request -httpServletRequest session -httpSes ...
- 十五、SAP自定义结构体
一.SAP的结构体是以BEGIN OF开始,以END OF结尾,代码如下: 二.输出结果如下
- 080-PHP的if与elseif用法
<?php /* 正确的使用方法: */ $a = 10; $b = 20; if ($a > $b): echo $a . "大于" . $b; elseif ($a ...
- POJ 1330 LCA最近公共祖先 离线tarjan算法
题意要求一棵树上,两个点的最近公共祖先 即LCA 现学了一下LCA-Tarjan算法,还挺好理解的,这是个离线的算法,先把询问存贮起来,在一遍dfs过程中,找到了对应的询问点,即可输出 原理用了并查集 ...
- 海外Essay写作如何减少重复用词
很多海外留学生在Essay写作时往往不善于对单词进行变化,不能将同一个意思用不同的方式表达出来,使得Essay显得单调乏味最终拿不到高分.小编建议大家应该尽量减少Essay写作中的重复用词.本文将为大 ...
- i春秋-web-爆破3
首先,是PHP代码审计,看懂就能解出来题. <?php error_reporting(0); session_start(); require('./flag.php'); if(!isset ...
- 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring基于XML装配Bean
Bean 的装配可以理解为依赖关系注入,Bean 的装配方式也就是 Bean 的依赖注入方式.Spring 容器支持多种形式的 Bean 的装配方式,如基于 XML 的 Bean 装配.基于 Anno ...
- cf1200 E Compress Words(哈希)
题意 有n个字符串,记为s1,s2……sn,s2与s1合并,合并的方式为:s1的后缀若与s2的前缀相同,就可以重叠起来,要最长的. 举个例子: “1333” “33345” → “133345” s ...