服务器返回 HTTP 响应代码 405 时的其他选项
Posted
技术标签:
【中文标题】服务器返回 HTTP 响应代码 405 时的其他选项【英文标题】:Other options when server returns HTTP response code 405 【发布时间】:2012-11-24 11:30:25 【问题描述】:背景:
我正在尝试将来自 applet 调用的类的数据发送到同一服务器上的 servlet。
public class SendData
public void send()
URL url = new URL("http://address.edu/folder/package/Servlet.class");
URLConnection conn = url.openConnection();
conn.setUseCaches(false);
conn.setDoInput(true);
conn.setDoOutput(true);
ObjectOutputStream objout = new ObjectOutputStream(conn.getOutputStream());
Object data = new Object();
objout.writeObject(data);
objout.flush();
objout.close();
servlet 如下所示:
public class Servlet extends HttpServlet
public void doPost(HttpServletRequest req, HttpServletResponse resp)
ObjectInputStream objin = new ObjectInputStream(req.getInputStream());
Object input = objin.readObject();
objin.close();
resp.setStatus(HttpServletResponse.SC_OK);
...// do other things
问题:
返回的错误是java.io.IOException: Server returned HTTP response code: 405 for URL: http://address.edu/folder/Servlet.class
。我正在使用我学校的服务器,我不是 100% 确定,但我认为服务器不允许使用 doPost 方法。
有没有办法解决这个问题?如果我提供授予访问权限的用户名和密码,我能否以某种方式通过 ftp 连接到 servlet.class?我是一个完整的初学者,所以任何建议/建议将不胜感激!
编辑:添加 web.xml
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" version="2.5"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>Servlet</servlet-name>
<servlet-class>package.Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Servlet</servlet-name>
<url-pattern>/Servlet</url-pattern>
</servlet-mapping>
</web-app>
【问题讨论】:
【参考方案1】:假设您的服务器上的所有内容都已正确配置(web.xml、URL 映射等),您还必须指定在客户端上使用 POST 方法。
到http://
URL 的URLConnection 默认使用GET 方法。
如果您确定此请求始终是 HTTP 请求,则可以强制转换为 HttpURLConnection
,它允许您设置请求方法:
URL url = new URL("http://address.edu/folder/Servlet.class");
conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("POST");
...
【讨论】:
这会返回相同的错误。您提到的配置是否会影响允许 doPost 方法?如果是这样,我从哪里开始? 那是完全不同的事情。然后,您应该向我们展示您的 web.xml(尤其是 Servlet 和 ServletMapping 部分)以及可能相关的服务器日志条目。 我添加了 web.xml,但不确定如何获取服务器日志条目。 尝试 URLhttp://address.edu/folder/Servlet
末尾不带 .class。这就是您将 Servlet 类映射到 web.xml 中的 URL 的方式。 (如果您的网络应用程序被称为“文件夹”)
现在在我这边已经很晚了,但是谁抛出了 FileNotFoundException 呢?客户?服务器?你的代码中有什么语句? (堆栈跟踪)以上是关于服务器返回 HTTP 响应代码 405 时的其他选项的主要内容,如果未能解决你的问题,请参考以下文章
ApacheIISNginx等绝大多数web服务器,都不允许静态文件响应POST请求,否则会返回“HTTP/1.1 405 Method not allowed”错误。
XMLHttpRequest 无法加载并且预检响应具有无效的 HTTP 状态代码 405
Jersey 中不允许的 405 方法正在返回 Tomcat 的 405 页面