doPost 超级导致 - HTTP 状态 405

Posted

技术标签:

【中文标题】doPost 超级导致 - HTTP 状态 405【英文标题】:doPost super causing - HTTP Status 405 【发布时间】:2013-12-08 04:10:59 【问题描述】:

到目前为止,我认为从您的 servlet 的 doPost(req, resp) 调用 super.doPost(req, resp) 是一种常见的做法 但这是我面临的问题 - 我有一个非常简单的 servlet,它有一个 doPost(req, resp) ,因为它是从 eclipse 自动生成的方法,所以它有 super.doPost(req, resp) 这很好,因为它正在调用它的父 doPost() 但我得到了

HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET 每当 servlet 被击中时。 我浏览了很多帖子和this post

一直在谈论同样的问题,建议的解决方案之一是删除 super.doGet()。

我对我的 Post 方法做了同样的事情,令我惊讶的是它起作用了!!!

我找不到这样做的合乎逻辑的原因。有人可以解释发生了什么吗? 为什么是

405 由于调用 super.doPost() 而闪烁。

谢谢, 索拉布。

【问题讨论】:

【参考方案1】:

HttpServlet.doPost 的默认实现返回 405 错误(方法不允许)。如果要在 servlet 中支持 POST 方法,则必须实现 doPost 方法。

这是code of HttpServlet.doPost

protected void doPost(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException 
    String protocol = req.getProtocol();
    String msg = lStrings.getString("http.method_post_not_supported");
    if (protocol.endsWith("1.1")) 
        resp.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, msg);
     else 
        resp.sendError(HttpServletResponse.SC_BAD_REQUEST, msg);
    

【讨论】:

所以我们扩展了 HttpServlet 和 @Override doPost 但在我们的实现中我们不调用它的 super ,因为调用 super 会给出这个消息。嗯....阅读您的回复后,我还通过了link。明白了!!!

以上是关于doPost 超级导致 - HTTP 状态 405的主要内容,如果未能解决你的问题,请参考以下文章

HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET [重复]

HTTP 状态 405 - 此 URL java servlet 不支持 HTTP 方法 POST [重复]

烧瓶 url_for 导致 escape_chars http_405

JavaWeb——HttpServlet

HTTP 状态 405 - 此 URL 不支持 HTTP 方法 POST

自定义servlet重写doGet或者doPost方法时,405 method not allowed