HTML中的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()在同一个响应中是不能混合使用的,如果混合使用会抛异常的。
转载于:https://www.cnblogs.com/liangjq/p/3890784.html
HTML中的form表单有一个关键属性 enctype相关推荐
- HTML中的form表单的标签、属性、属性值; CSS以及HTML5新增属性、属性值
form表单HTML5.CSS3标签及属性.属性值 form表单HTML标签.属性.属性值: (单行文本输入框) (密码输入框) (单选框) (多选框) (提交按钮) (重置按钮) 或者按钮(空按钮) ...
- button layui 点击事件_解决layui中的form表单与button的点击事件冲突问题
解决layui中的form表单与button的点击事件冲突问题 layui的form表单位置和button标签的位置重合,会使得button的click事件得不到响应,如图: 蓝色底为form的位置, ...
- 在微信小程序中提交form表单
怎么在微信小程序中提交form表单 发布时间:2021-04-07 16:26:31 来源:亿速云 阅读:1229 作者:Leah 栏目:web开发 活动:亿速云新用户活动,各类服务器大降价,满足绝大 ...
- HTML中的form表单及其提交原理
HTML中的form表单 form属性 表单内容数据类型 表单控件 input表单控件 type属性 其他属性 button表单控件 label表单控件 表单组件 select option 表单提交 ...
- antd-vue中的form表单label标签for导致点击文字触发输入框解决方案
antd-vue中的form表单label标签for导致点击文字触发输入框解决方案 参考文章: (1)antd-vue中的form表单label标签for导致点击文字触发输入框解决方案 (2)http ...
- javascript构造可以上传文件的form表单(通过js修改enctype)
在上传文件时,我们都知道需要在form表单中加上enctype="multipart/form-data".而在开发过程中,也有可能遇到需要用javascripts构造form表单 ...
- 判断form表单里面的元素属性是否有数据_html form标签的action属性是什么意思?又有哪些用法?(附实例)...
本篇文章主要的介绍HTML form表单标签的action属性的用法,用法介绍和实例等都在里面,现在让我们一起来看吧 程序猿的生活:打造全网web前端全栈资料库(总目录)看完学的更快,掌握的更加牢固, ...
- form表单的一个页面多个上传按钮实例
/* * 图片上传 */@RequestMapping("/uploadFile") @ResponseBody public String uploadFile(@Request ...
- 第83天:jQuery中操作form表单
操作form表单 1. 属性操作 设置属性: // 第一个参数表示:要设置的属性名称 // 第二个参数表示:该属性名称对应的值 $(selector).attr("title", ...
最新文章
- mysql学习总结一:mysql的安装,介绍,基本命令操作
- I/O多路复用——select
- 基于Linux的socket编程模板
- c#Clay开源的动态语言dynamic框架,让您形如javascript的方式创建对象!
- 苹果id可以同时用两个手机吗_科技V报余承东:鸿蒙OS随时可用于手机;疑似魅族16s Pro通过3C认证20190809...
- 自行编译cups绕过错误:file /etc/rc.d/rc.local from install of systemd conflicts with file from
- Django url() 函数详解
- 服装行业电子商务的概述
- android Studio里查看db文件
- BZOJ 5109 [CodePlus 2017]大吉大利,晚上吃鸡!
- 公司的hr是怎么在被解雇的边缘疯狂试探的
- pyspark steaming常规语句及操作
- debian系统服务器读不出来,Debian10局域网服务器使用踩坑笔记
- 【归档】Prove that the set of continuous real-valued functions on the interval [0, 1] is a subspace...
- 川教版八年级计算机教学计划,川教版八年级下信息技术教学计划.doc
- Api 数据自动入库
- windows验证和SQLSERVER验证有什么区别?--混合认证
- Day2 - Wanan 么么哒。
- Eclipse安装插件后手动删除依赖无法再次安装插件
- Carsim学习心得
热门文章
- 利用c语言结构体和union实现类似c++的public,private的实现
- 栈区和堆区内存分配区别
- C++中前置声明介绍
- alexnet训练多久收敛_如何将深度学习训练速度提升一百倍?PAISoar 来了
- linux笔记本没有insert,无法在Linux中将UTF8插入数据库MySQL(Can not insert UTF8 to Database MySQL in Linux)...
- java总复习_java期末复习
- Java项目:无库版银行管理系统(java+Gui+文档)
- python selenium 等待页面加载完毕_Selenium_等待页面加载完毕
- 关于python的比赛_【蓝桥杯】——python集团的比赛技巧,Python,组
- 线程、线程匿名内部类、解决线程不安全的方式