Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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
Javascript HTTPPOST在servlet上给出了405错误,但在JSP上也可以这样做_Javascript_Html_Ajax_Jsp_Servlets - Fatal编程技术网

Javascript HTTPPOST在servlet上给出了405错误,但在JSP上也可以这样做

Javascript HTTPPOST在servlet上给出了405错误,但在JSP上也可以这样做,javascript,html,ajax,jsp,servlets,Javascript,Html,Ajax,Jsp,Servlets,其他与405错误相关的问题对我来说都没有任何意义。 我正在运行ApacheTomcat9,默认安装。在开发过程中,客户端位于同一台机器上。我只在发布到servlet时收到405个错误。当我将servlet转换为JSP页面时,它工作正常,如果我在servlet上使用GET,它也工作正常。我正在使用AJAX调用。代码如下: function AJAXcommit(url, params) { var xmlHttp=GetXmlHttpObject(); xmlHttp.open("POST

其他与405错误相关的问题对我来说都没有任何意义。 我正在运行ApacheTomcat9,默认安装。在开发过程中,客户端位于同一台机器上。我只在发布到servlet时收到405个错误。当我将servlet转换为JSP页面时,它工作正常,如果我在servlet上使用GET,它也工作正常。我正在使用AJAX调用。代码如下:

function AJAXcommit(url, params) {
  var xmlHttp=GetXmlHttpObject();
  xmlHttp.open("POST", url, true);
  xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  xmlHttp.onreadystatechange = function() { 
    if(xmlHttp.readyState == 4 && xmlHttp.status == 200) {
        alert(xmlHttp.responseText);
    }
  };
xmlHttp.send(params);
}
从javascript函数调用此函数:

AJAXcommit("setDefault.jsp","p1=a&p2=b");
工作正常,但是当我使用(几乎相同-我从另一个创建了一个)Servlet时,我得到一个405错误:

 AJAXcommit("setDefault","p1=a&p2=b");
通过GET调用servlet效果很好,例如standalone(但也可以通过使用GET的不同AJAX调用从主页面调用):

servlet代码只有几行特定于servlet的代码:

public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException
{
     String retVar="";
     String p1 = request.getParameter("p1");
     String p2 = request.getParameter("p2");
     PrintWriter out = response.getWriter();
     // do something with p1 and p2
     out.println("Result="+retVar);
}

 Same for doPost ()  // which solved the problem .....
我读到一些关于可能需要授权的信息?但那是什么样的授权呢?我需要为此设置一个Tomcat用户吗?
我对3个不同的servlet有这个问题。使用GET,或者将它们转换为JSP的解决方案。但是我必须考虑安全性,所以我宁愿使用Servlet上的POST。< /P> < P>我找到了答案——我专注于客户端,忽略服务器。谢谢@BalusC的评论。缺少“doPost()”。添加这一点使它起作用。

“与405错误相关的其他问题对我来说都没有任何意义”,但您仍然没有显示您的
doPost()
方法。到目前为止发布的所有代码都与问题无关。所有这些都是客户端调用,但它们都会失败,并出现相同的错误,因为问题出在servlet代码中,而不是客户端代码中。如果您的
doPost()
方法中包含了最简单的代码片段,但仍然会重现问题,那么我们就可以指出您的错误。不知何故,我不是这么想的,因为GET可以正常工作,所以我怀疑客户端存在问题,但我想您是对的。我编辑了我的帖子,添加了doGet部分。感谢您指出这一点,“但是在JSP上做同样的事情很好”实际上不是真的吗?
public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException
{
     String retVar="";
     String p1 = request.getParameter("p1");
     String p2 = request.getParameter("p2");
     PrintWriter out = response.getWriter();
     // do something with p1 and p2
     out.println("Result="+retVar);
}

 Same for doPost ()  // which solved the problem .....