最近做项目时,发现手机客户端通过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报文中的内容是:

  Html代码

  

  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报文中的内容是:

  ?

  Html代码

  

  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()获取不到数据的问题相关推荐

  1. 当FORM的ENCTYPE=quot;multipart/form-dataquot; 时request.getParameter()获取不到

    当FORM的ENCTYPE="multipart/form-data" 时request.getParameter()获取不到值. 解决方法: 提交普通表单时,在提交前: $(&q ...

  2. postman发送post请求,用request.getParameter()获取请求参数

    1.接口代码 @RequestMapping("notifyUrl")   public void notifyUrl(HttpServletRequest request, Ht ...

  3. setCharacterEncoding 是在request.getParameter获取参数之前 设置request的编码格式 一步到位...

    setCharacterEncoding 是在request.getParameter获取参数之前 设置request的编码格式 一步到位 转载于:https://www.cnblogs.com/cl ...

  4. springmvc从request中获取body的数据的方法

    从request中获取只需要3步骤即可,其中会用到dubbo的IOUtils,需要引入maven <dependency><groupId>com.alibaba</gr ...

  5. vue fromData提交表单(文件)的同时 axios通过将token封装一起发送,Springboot后端拦截器通过request.getParameter获取,Redis验证token

    一.前端: 1.在封装好的axios接口: import axios from 'axios'axios.defaults.withCredentials = true;// 允许跨域携带cookie ...

  6. 微信小程序wx.request POST获取不到数据解决办法

    get //发起请求     wx.request({       url: 'http://www.xiaochengxu.com/home/index/curd', //仅为示例,并非真实的接口地 ...

  7. request无法获取到前端发送的form表单数据

    文章目录 问题:servlet中使用request.getParameter()获取不到前端发送的form表单中的文本数据 解决方案 问题:servlet中使用request.getParameter ...

  8. Request —— 获取请求行数据 获取请求头数据 获取请求体数据

    1. request对象和response对象的原理     1. request和response对象是由服务器创建的.我们来使用它们     2. request对象是来获取请求消息,respon ...

  9. request.getParameter和request.getAttribute之间的区别

    HttpServletRequest类既有getAttribute()方法,也由getParameter()方法,这两个方法有以下区别: (1)HttpServletRequest类有setAttri ...

最新文章

  1. BZOJ 1968 [Ahoi2005]COMMON 约数研究
  2. Linux 下禅道和 SVN、GIT 集成插件发布
  3. Myeclipse10.7安装git插件并将Java项目上传到码云(github)
  4. 用Flask开发Web版日历应用
  5. 外呼机器人起名_电销外呼机器人如此受欢迎,今天终于知道原因了
  6. 利用Python进行数据分析笔记-时间序列(时区、周期、频率)
  7. Handler机制原理图、源码、使用!!!!!
  8. python求和1到100_python实现1加到100
  9. IReport问题的整理
  10. 谷歌浏览器部分iframe页面无法打开,跨域问题
  11. 1960-征战的Loy
  12. python常用的颜色英文表达_python 中颜色的表示
  13. Kafka安装与简介
  14. Tomcat8.0系列配置GlobalSign SSL证书
  15. 淘宝/天猫获得淘宝店铺详情 API接口及 返回值说明
  16. 《Long Short-Term Memory》翻译,Sepp Hochreiter, ¨urgen Schmidhuber.1997,9(8):1735-1780
  17. 【资料合集】2018云栖大会上半年深圳、南京、武汉、上海峰会全记录
  18. CentOS7目录结构详细版
  19. 【财务学习笔记】ROE和ROI的比较
  20. 波形包络提取与峰值提取_干涉信号中的小波峰峰值提取方法与流程

热门文章

  1. 20155210潘滢昊 2016-2017-2《Java程序设计》第一周学习总结
  2. XML和SQL的互相操作
  3. DSPE-PEG-FA、二硬脂酰基磷脂酰乙醇胺-聚乙二醇-叶酸、磷脂-聚乙二醇-叶酸
  4. Matlab保存图片背景为透明
  5. Spring Bean配置细节author: 惠惠
  6. python绕过验证码登录_python接口自动化(十三)--cookie绕过验证码登录(详解)...
  7. 考研复试6 编译原理
  8. 游龙传说服务器维护,游龙传说日常玩法有哪些 日常玩法说明
  9. 知名传统企业如何制定面向80后的互联网战略(软件世界09年10月专栏)
  10. 找到当月的休息日(Java)