Java HttpURLConnection接收到405,但服务已完成

Java HttpURLConnection接收到405,但服务已完成,java,apache,http,tomcat,servlets,Java,Apache,Http,Tomcat,Servlets,我有一个servlet,它在ApacheTomcat环境中扩展了HttpServlet 它有一个doPost覆盖 我试图通过setDoOutput=true的HttpURLConnection进行访问 客户机获得405,但是工作仍然由Tomcat服务器执行,Tomcat日志中的条目证明了这一点 我确实在httpd.conf文件中找到了一个限制帖子,将其删除并重新启动了Apache <Location /servlets> <Limit POST> Orde

我有一个servlet,它在ApacheTomcat环境中扩展了HttpServlet

它有一个doPost覆盖

我试图通过setDoOutput=true的HttpURLConnection进行访问

客户机获得405,但是工作仍然由Tomcat服务器执行,Tomcat日志中的条目证明了这一点

我确实在httpd.conf文件中找到了一个限制帖子,将其删除并重新启动了Apache

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

命令拒绝,允许
全盘否定
允许从本地主机
满足任何
同样的结果

如果我把客户端改为GET,我会得到一个405,这是意料之中的,没有doGet

Apache日志正确地反映了客户机请求是GET还是POST,这取决于我发送的风格

看起来这确实是个问题,但运气不好

还有别的地方可以看吗

HttpURLConnection正在接收405,但服务已完成


正如错误明确指出的那样,您似乎正在使用servlet不支持的HTTP方法。正如您提到的,servlet只覆盖了doPost,所以它只能处理POST请求。发送请求时,您似乎正在使用其他HTTP方法。

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

“HttpURLConnection with setDoOutput=true”,正如OP明确指出的,这意味着客户端已经使用了POST。有关如何使用/理解
URLConnection
的详细教程,请参见。该HTTPD配置与该问题有何关联?您的Tomcat是由HTTPD和mod_jk共同推出的吗?你是不是在暗示,当你的Tomcat不在HTTPD的前面,而是直接连接时,它可以正常工作?如果是,那么问题是由HTTPD引起的?在这种情况下,这不是程序员的问题,而是服务器管理员的问题。然后应将您的问题迁移到serverfault.com。