【转】HTML中的form表单的两种enctype属性
来源:互联网 发布:phpstorm格式化js代码 编辑:程序博客网 时间:2024/05/21 17:39
最近做项目时,发现手机客户端通过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()是获取不到提交的数据的。
最后注意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()在同一个响应中是不能混合使用的,如果混合使用会抛异常的。
- 【转】HTML中的form表单的两种enctype属性
- html中form表单的enctype属性
- HTML中的form标签的enctype 属性
- form表单中的encType属性
- form表单中的encType属性
- Form表单的enctype属性
- form表单的enctype属性
- html的form表单中Enctype属性的用法
- html的form表单中Enctype属性的用法
- HTML教程:form表单中Enctype属性的用法
- form表单中的enctype属性什么意思?
- 深入解析form表单的enctype属性
- Form表单标签的Enctype属性
- php中form表单的enctype属性
- form表单标签的enctype属性
- HTML <form> 标签的 enctype 属性
- HTML <form> 标签的 enctype 属性
- HTML <form> 标签的 enctype 属性
- 自动化信任机制脚本
- ScrollView滚动到底部和顶部的检测
- hadoop日志【5】----存储迁移之后
- openstack创建虚拟机
- hdu 2503 1713 1108 最小公倍数&最大公约数
- 【转】HTML中的form表单的两种enctype属性
- javaScript逻辑与操作符运算规则
- python中计时工具timeit模块的基本用法
- 优酷去广告代码
- java注解应用实例 - Annotation, 自定义注解, 注解类规则
- Redis:安装、配置、操作和简单代码实例(C语言Client端)
- 可空类型
- HDU 4643 GSM
- 解决VS2010中菜单设置快捷键 运行后不显示的问题