0

我有一个在 Apache tomcat 环境中扩展 HttpServlet 的 servlet。

它有一个 doPost 覆盖。

我正在尝试通过带有 setDoOutput = true 的 HttpURLConnection 进行访问。

客户端收到 405,但工作仍由 Tomcat 服务器执行,如 Tomcat 日志中的条目所示。

我确实在 httpd.conf 文件中找到了一个 Limit POST 并将其删除并重新启动了 Apache。

<Location /servlets>
   <Limit POST>
     Order deny,allow
     Deny from all
     Allow from localhost
     Satisfy any
   </Limit>
</Location>

结果相同。

如果我将客户端更改为 GET,我会得到预期的 405,没有 doGet。

Apache 日志正确反映了客户端请求是 GET 还是 POST,具体取决于我发送的风格。

看起来这确实应该是问题,但没有运气

还有什么地方可以看?

4

2 回答 2

0

感谢您的回复。我们有一个扩展 HttpServlet 的 A 类。所有这些都是其他 servlet B 的扩展 A,它们都隐式执行了 A 的超级。我试图通过让 B 直接扩展 HttpServlet 来摆脱 A。我没有注意到的是所有 B 都明确地执行了过去 A 的 super.doPost()。当 A 被省略时, super.doPost() 是 HttpServlet 的,这似乎导致了问题。一旦我删除了 super.doPost() 一切都开始按预期工作。

于 2013-07-27T03:18:03.957 回答
0

HttpURLConnection 收到 405 但服务已完成

正如错误清楚地表明的那样,您似乎正在使用您的 servlet 不支持的 HTTP 方法。正如您所提到的,您的 servlet 仅覆盖了 doPost,因此它只能处理 POST 请求。而且您在发送请求时似乎正在使用其他一些 HTTP 方法。

于 2013-07-24T17:43:00.333 回答