博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HTML中的form表单有一个关键属性 enctype
阅读量:6504 次
发布时间:2019-06-24

本文共 2015 字,大约阅读时间需要 6 分钟。

HTML中的form表单有一个关键属性 enctype=application/x-www-form-urlencoded 或multipart/form-data。

 

1、enctype="application/x-www-form-urlencoded"是默认的编码方式,当以这种方式提交数据时,HTTP报文中的内容是:

 

Html代码  
  1. <span style="font-size: small;">POST /post_test.php HTTP/1.1   
  2. Accept-Language: zh-CN  
  3. User-Agent: Mozilla/4.0   
  4. Content-Type: application/x-www-form-urlencoded   
  5. Host: 192.168.12.102  
  6. Content-Length: 42  
  7. Connection: Keep-Alive  
  8. Cache-Control: no-cache  
  9.    
  10. title=test&content=%B3%AC%BC%B6%C5%AE%C9%FA&submit=post+article   
  11. </span>  

Servlet的API提供了对这种编码方式解码的支持,只需要调用ServletRequest 类中的getParameter()方法就可以得到表单中提交的数据。

2、在传输大数据量的二进制数据时,必须将编码方式设置成enctype="multipart/form-data",当以这种方式提交数据时,HTTP报文中的内容是:

 

Html代码  
  1. <span style="font-size: small;">POST /post_test.php?t=1 HTTP/1.1  
  2. Accept-Language: zh-CN  
  3. User-Agent: Mozilla/4.0    
  4. Content-Type: multipart/form-data; boundary=---------------------------7dbf514701e8  
  5. Accept-Encoding: gzip, deflate  
  6. Host: 192.168.12.102  
  7. Content-Length: 345  
  8. Connection: Keep-Alive  
  9. Cache-Control: no-cache  
  10.    
  11. -----------------------------7dbf514701e8  
  12. Content-Disposition: form-data; name="title"  
  13. test  
  14. -----------------------------7dbf514701e8  
  15. Content-Disposition: form-data; name="content"  
  16. ....  
  17. -----------------------------7dbf514701e8  
  18. Content-Disposition: form-data; name="submit"  
  19. post article  
  20. -----------------------------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()在同一个响应中是不能混合使用的,如果混合使用会抛异常的。

 

转载于:https://www.cnblogs.com/liangjq/p/3890784.html

你可能感兴趣的文章
《Python数据科学实践指南》一2.2 字符串
查看>>
《R数据可视化手册》——1.1 安装包
查看>>
《iOS创意程序设计家》——导读
查看>>
spring-aop
查看>>
android RecycleView Adapter简单封装
查看>>
PgSQL · 案例分享 · 递归收敛优化
查看>>
Dart的数据库操作
查看>>
Codeforces 591 B Rebranding【Codeforces Round #327 (Div. 2)】
查看>>
命名难,难于上青天
查看>>
做完和做好不一样
查看>>
APUE读书笔记-05标准输入输出库(7)
查看>>
23 第一周作业
查看>>
DNS解析偶尔延迟
查看>>
iOS打电话,发短信,发邮件,打开网址
查看>>
06-验证码-基本功能实现
查看>>
Java数据结构与算法(六) 希尔排序
查看>>
canvas学习笔记
查看>>
IntelliJ Idea下Go项目开启Debug调试
查看>>
elasticsearch安装步骤
查看>>
PHP获取Cookie模拟登录CURL(转)
查看>>