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

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

Accept:*/*

Accept-Encoding:gzip, deflate, br

Accept-Language:zh-CN,zh;q=0.9,en;q=0.8

Connection:keep-alive

Content-Length:36

Content-Type:application/x-www-form-urlencoded; charset=UTF-8

Cookie:JSESSIONID=BEFE08D4761E2CED0B93D84CEED8DA73; JSESSIONID=121B641B71B923F88DBA9BCDBC541FA5; XSRF-TOKEN=5f79508e834371a1b14fd13ef5b58ed2

Host:10.64.103.106:8443

Origin:https://10.64.103.106:8443

Referer:https://10.64.103.106:8443/OPMUI/jsp/secospace/index.jsp?lang=zh_CN

User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36

X-Requested-With:XMLHttpRequest

X-XSRF-TOKEN:5f79508e834371a1b14fd13ef5b58ed2

title=test&content=%B3%AC%BC%B6%C5%AE%C9%FA&submit=post+article

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

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

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8

Accept-Encoding:gzip, deflate, br

Accept-Language:zh-CN,zh;q=0.9,en;q=0.8

Cache-Control:max-age=0

Connection:keep-alive

Content-Length:1308

Content-Type:multipart/form-data; boundary=----WebKitFormBoundarybTh8eYefb4cLKAqx

Cookie:JSESSIONID=BEFE08D4761E2CED0B93D84CEED8DA73; JSESSIONID=121B641B71B923F88DBA9BCDBC541FA5; XSRF-TOKEN=5f79508e834371a1b14fd13ef5b58ed2

Host:10.64.103.106:8443

Origin:https://10.64.103.106:8443

Referer:https://10.64.103.106:8443/OPMUI/jsp/secospace/index.jsp?lang=zh_CN

Upgrade-Insecure-Requests:1

User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36

------WebKitFormBoundarybTh8eYefb4cLKAqx

Content-Disposition: form-data; name="vlanPath"

/OPMUI/cxfservices/vlan/vlanPolicyManagerService/accessvlanpools

------WebKitFormBoundarybTh8eYefb4cLKAqx

Content-Disposition: form-data; name="vlanUpload"; filename=""

Content-Type: application/octet-stream

------WebKitFormBoundarybTh8eYefb4cLKAqx

Content-Disposition: form-data; name="vlanUserName"

admin

------WebKitFormBoundarybTh8eYefb4cLKAqx

如果以这种方式提交数据就要用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. request.getParameter()获取不到数据的问题

    最近做项目时,发现手机客户端通过http协议post方式上传数据到服务端,在服务器端通过request.getInputStream()能获取到相应的数据,但用request.getParameter ...

  2. ajax post 请求 ,java端使用 request.getParameter 获取不到数据问题

    js端 $.ajax({ type:'POST', data:{a:1}, url:_this.apiUrl+url, dataType:'json',//使用jsonp方式请求 contentTyp ...

  3. servlet 表单加上multipart/form-data后request.getParameter获取NULL(已解决)

    先上结论(可能不对,因为这是根据实践猜测而来,欢迎指正) 表单改为multipart/form-data传值后,数据就不能通过普通的request.getParameter获取. 文件和文件名通过Fi ...

  4. request.getparameter() 获取中文出现乱码 问题

    http请求是以ISO-8859-1的编码来传送url的 如果页面的content-type为utf-8,那么在发送请求时,会将字符转成utf-8后进行传送 如: 中 的UTF-8编码为:E4 B8 ...

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

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

  6. request.getParameter()获取URL中文参数乱码的解决办法

    这个问题耽误好长时间,URL传中文参数出现乱码,就算首次使用request接收就添加 request.setCharacterEncoding("UTf-8"); 依然报错不误. ...

  7. 解决当FORM的ENCTYPE="multipart/form-data" 时request.getParameter()获取不到值的方法

    部分转载于: http://blog.csdn.net/georgejin/article/details/1706647 http://www.cnblogs.com/loveyunk/p/6089 ...

  8. 过滤器中处理multipart/form-data头部的post请求request.getParameter(")获取不到参数问题

    如果不是文件类型请求,我们使用request.getParameter("");方法是可以获取到参数内容的,如果是文件类型的请求即请求的头部信息为“multipart/form-d ...

  9. jquery通过ajax-json访问java后台传递参数,通过request.getParameter获取不到参数的说明

    http://m.blog.csdn.net/blog/eyebrother/36007145 所以当后台通过request.getParameter("name");对参数值的作 ...

随机推荐

  1. name转json

    ^(\{)?(?<=\n)(.*)(\})?$ "$2":"", UserId UserOrderId ChargeAccount BuyNum Good ...

  2. Adding ASP.NET MVC5 Identity Authentication to an existing project

    Configuring Identity to your existing project is not hard thing. You must install some NuGet package ...

  3. [BTS] BizTalk EDI character set and separator settings

    最近一个项目上遇到需要对EDI头.分隔符.小数点等配置项进行设置. 这里只记录一下结果,原理不记了,多看MSDN. UNB1中的信息在BizTalk中是不会体现在EDI输出文件中的,双方协商好即可. ...

  4. SublimeText插件Pandoc导出PDF中文报错或者中文不显示解决方法

    按照如下自定义配置(主要是指定latex的字体[仅限本机字体]) { "user": { // "pandoc-path":"C:\\Program ...

  5. 【转载】C++中替代sprintf的std::ostringstream输出流详解

    一.简单介绍 ostringstream是C++的一个字符集操作模板类,定义在sstream.h头文件中.ostringstream类通常用于执行C风格的串流的输出操作,格式化字符串,避免申请大量的缓 ...

  6. Oracle同义词(synonym)

    oracle的同义词总结   从字面上理解就是别名的意思,和视图的功能类似.就是一种映射关系.   同义词拥有如下好处:   节省大量的数据库空间,对不同用户的操作同一张表没有多少差别;   扩展的数 ...

  7. SpringBoot入坑-请求参数传递

    前一篇我们探讨了关于springboot的配置文件和Controller的使用,本篇我们来一起探讨一下关于springboot如何传递参数的知识. 参数传递我们最常见的就是在url后通过?/& ...

  8. Windows下使用VS2017搭建FLTK开发环境

    环境介绍 系统:win10 64位 IDE:VS 2017 Community FLTK版本:1.3.4-2 下载FLTK 截止到本文编写,FLTK的最新稳定版本是1.3.4-2.我们从官网(www. ...

  9. java中的动态代理Proxy

    动态代理是java语言的一个神奇的地方,不是很好理解,下面来看看关键的地方. InvocationHandler 是一个接口,官方文档解释说,每个代理的实例都有一个与之关联的 InvocationHa ...

  10. ubuntu 忽略文件的50unattended升级问题

    ubuntu出现这样问题 既然说那个文件扩展名无效,那干脆直接把那个文件删掉 sudo rm /etc/apt/apt.conf.d/20auto-upgrades.ucf-old 删掉之后应该就不会 ...