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. title=test&content=%B3%AC%BC%B6%C5%AE%C9%FA&submit=post+article
  10. </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. -----------------------------7dbf514701e8
  11. Content-Disposition: form-data; name="title"
  12. test
  13. -----------------------------7dbf514701e8
  14. Content-Disposition: form-data; name="content"
  15. ....
  16. -----------------------------7dbf514701e8
  17. Content-Disposition: form-data; name="submit"
  18. post article
  19. -----------------------------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

HTML中的form表单有一个关键属性 enctype相关推荐

  1. HTML中的form表单的标签、属性、属性值; CSS以及HTML5新增属性、属性值

    form表单HTML5.CSS3标签及属性.属性值 form表单HTML标签.属性.属性值: (单行文本输入框) (密码输入框) (单选框) (多选框) (提交按钮) (重置按钮) 或者按钮(空按钮) ...

  2. button layui 点击事件_解决layui中的form表单与button的点击事件冲突问题

    解决layui中的form表单与button的点击事件冲突问题 layui的form表单位置和button标签的位置重合,会使得button的click事件得不到响应,如图: 蓝色底为form的位置, ...

  3. 在微信小程序中提交form表单

    怎么在微信小程序中提交form表单 发布时间:2021-04-07 16:26:31 来源:亿速云 阅读:1229 作者:Leah 栏目:web开发 活动:亿速云新用户活动,各类服务器大降价,满足绝大 ...

  4. HTML中的form表单及其提交原理

    HTML中的form表单 form属性 表单内容数据类型 表单控件 input表单控件 type属性 其他属性 button表单控件 label表单控件 表单组件 select option 表单提交 ...

  5. antd-vue中的form表单label标签for导致点击文字触发输入框解决方案

    antd-vue中的form表单label标签for导致点击文字触发输入框解决方案 参考文章: (1)antd-vue中的form表单label标签for导致点击文字触发输入框解决方案 (2)http ...

  6. javascript构造可以上传文件的form表单(通过js修改enctype)

    在上传文件时,我们都知道需要在form表单中加上enctype="multipart/form-data".而在开发过程中,也有可能遇到需要用javascripts构造form表单 ...

  7. 判断form表单里面的元素属性是否有数据_html form标签的action属性是什么意思?又有哪些用法?(附实例)...

    本篇文章主要的介绍HTML form表单标签的action属性的用法,用法介绍和实例等都在里面,现在让我们一起来看吧 程序猿的生活:打造全网web前端全栈资料库(总目录)看完学的更快,掌握的更加牢固, ...

  8. form表单的一个页面多个上传按钮实例

    /* * 图片上传 */@RequestMapping("/uploadFile") @ResponseBody public String uploadFile(@Request ...

  9. 第83天:jQuery中操作form表单

    操作form表单 1. 属性操作 设置属性: // 第一个参数表示:要设置的属性名称 // 第二个参数表示:该属性名称对应的值 $(selector).attr("title", ...

最新文章

  1. mysql学习总结一:mysql的安装,介绍,基本命令操作
  2. I/O多路复用——select
  3. 基于Linux的socket编程模板
  4. c#Clay开源的动态语言dynamic框架,让您形如javascript的方式创建对象!
  5. 苹果id可以同时用两个手机吗_科技V报余承东:鸿蒙OS随时可用于手机;疑似魅族16s Pro通过3C认证20190809...
  6. 自行编译cups绕过错误:file /etc/rc.d/rc.local from install of systemd conflicts with file from
  7. Django url() 函数详解
  8. 服装行业电子商务的概述
  9. android Studio里查看db文件
  10. BZOJ 5109 [CodePlus 2017]大吉大利,晚上吃鸡!
  11. 公司的hr是怎么在被解雇的边缘疯狂试探的
  12. pyspark steaming常规语句及操作
  13. debian系统服务器读不出来,Debian10局域网服务器使用踩坑笔记
  14. 【归档】Prove that the set of continuous real-valued functions on the interval [0, 1] is a subspace...
  15. 川教版八年级计算机教学计划,川教版八年级下信息技术教学计划.doc
  16. Api 数据自动入库
  17. windows验证和SQLSERVER验证有什么区别?--混合认证
  18. Day2 - Wanan 么么哒。
  19. Eclipse安装插件后手动删除依赖无法再次安装插件
  20. Carsim学习心得

热门文章

  1. 利用c语言结构体和union实现类似c++的public,private的实现
  2. 栈区和堆区内存分配区别
  3. C++中前置声明介绍
  4. alexnet训练多久收敛_如何将深度学习训练速度提升一百倍?PAISoar 来了
  5. linux笔记本没有insert,无法在Linux中将UTF8插入数据库MySQL(Can not insert UTF8 to Database MySQL in Linux)...
  6. java总复习_java期末复习
  7. Java项目:无库版银行管理系统(java+Gui+文档)
  8. python selenium 等待页面加载完毕_Selenium_等待页面加载完毕
  9. 关于python的比赛_【蓝桥杯】——python集团的比赛技巧,Python,组
  10. 线程、线程匿名内部类、解决线程不安全的方式