Java Can';无法从HttpServletRequest读取表单数据
我有一个简单的xmlHttpRequest,它向servlet提交一个删除 以下是JS: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
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的什么实现?