【发布时间】:2020-04-15 17:12:57
【问题描述】:
与 405 错误相关的其他问题对我来说没有任何意义。 我正在运行 Apache Tomcat 9,默认安装。在开发过程中,客户端在同一台机器上。我只在 POST 到 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 可以正常工作,例如独立(但也可以从我的主页通过使用 GET 的不同 AJAX 调用):
http://localhost:8080/myproject/setDefault?p1=a&p2=b
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。
【问题讨论】:
-
“与 405 错误相关的其他问题对我来说没有任何意义” 但您仍然没有显示您的
doPost()方法。到目前为止发布的所有代码都与问题无关。它们都是客户端调用,但它们都会失败并出现相同的错误,因为问题出在您的 servlet 代码中,而不是在客户端代码中。如果您包含了您的doPost()方法的最小代码sn-p 仍然重现问题,那么我们将能够指出您的错误。 -
不知何故我没有那样想,因为 GET 没有问题,所以我怀疑客户端的问题,但我想你是对的。我编辑了我的帖子以添加 doGet 部分。感谢您指出这一点
-
所以,“但在 JSP 上也能正常工作” 实际上不是真的?
标签: javascript html ajax jsp servlets