Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';无法从HttpServletRequest读取表单数据_Java_Http_Servlets - Fatal编程技术网

Java Can';无法从HttpServletRequest读取表单数据

Java Can';无法从HttpServletRequest读取表单数据,java,http,servlets,Java,Http,Servlets,我有一个简单的xmlHttpRequest,它向servlet提交一个删除 以下是JS: function sendDELETE () { var http = new XMLHttpRequest(); var url = "myServlet"; var params = "param="+document.getElementById("param").value; http.o

我有一个简单的xmlHttpRequest,它向servlet提交一个删除

以下是JS:

        function sendDELETE () {
            var http = new XMLHttpRequest();
            var url = "myServlet";
            var params = "param="+document.getElementById("param").value;
            http.open("DELETE", url, false);

            //Send the proper header information along with the request
            http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

            http.onreadystatechange = function() {//Call a function when the state changes.
                if(http.readyState == 4 && http.status == 200) {
                }
            }
            http.send(params);
        }
这是由按钮上的onClick事件调用的

以下是chrome开发工具显示的内容:

Request URL:http://xxxxxx/myServlet
Request Method:DELETE
Status Code:200 OK
Request Headersview source
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Content-Length:36
Content-type:application/x-www-form-urlencoded
Host:xxxxxxxxx
Origin:http://xxxxxxx
Referer:http://xxxxxxxxxxx/main.html
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36
Form Dataview parsed
param=value


Response Headersview source
    Connection:Keep-Alive
    Content-Length:0
    Content-Type:text/html
    Date:Wed, 27 Aug 2014 01:50:10 GMT
    Keep-Alive:timeout=65, max=7998
    Server:Apache-Coyote/1.1
通过查看这一点,我可以清楚地看到表单数据在发出的请求中具有param=值

在我的服务器上的
dodelite
中,我尝试了两种方法:

String param=req.getParameter(“param”)

String inputMap=CharStreams.toString(req.getReader());
String[]parts=inputMap.split(“”);
字符串参数=零件[1]

但两者都不起作用-参数仍然为空


我做错了什么?

只有POST请求在请求正文中将参数作为实体。您必须将其作为URL的一部分发送


请参阅:“DELETE方法请求源服务器删除由请求URI标识的资源。”

从我看到的情况来看,您没有做错任何事情

在HTTP中,任何请求都可以有一个请求体(请参阅)。此外,HTTP并不关心有效负载的类型

发送有效负载进行删除是否有意义是另一个问题;毕竟,要删除的资源无论如何都需要由请求URI来标识


如果您无法在有效负载中检索请求主体,这可能是由于servlet实现中的错误(到底是哪个?)或您的客户机和服务器之间的某个错误(代理?servlet过滤器?)造成的。这一点很好,但这里似乎有几个因素在起作用。如果参数在退出时(如请求中所示),servlet是否会删除它?换句话说-RFC指定了如何实现,但是\n是什么阻止了这个参数对HttpRequest对象可用?我最终把这个参数放在了查询字符串中-但是我仍然不明白它从主体中删除的位置或原因…它不是“从主体中删除的”。只是没有在体内找到。请求参数在URL中查找,POST除外。这不是一篇博文,也不是一个需要有正文的请求(比如PUT),所以你也不能通过阅读正文来获得它。(1)RFC2616已经过时了。(2) 有效负载格式和方法名称是完全正交的概念。您可以将application/x-www-form-urlencoded与允许请求主体的任何请求方法一起使用(这是否是一个好主意是另一个问题)@JulianReschke这里的证据是
HttpServletRequest
不同意。我使用的是标准Java servlet。。。我怀疑他们是否有bug?AFAIU,JavaServlet规范定义了一个API。您使用的是该API的什么实现?