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

标签 java servlets http-status-code-405

当我使用以下代码(如下)时,出现错误 HTTP Status 405 - HTTP method POST is not supported by this URL ...引起问题的行(显然)是 getServletContext().getRequestDispatcher("/EditObject?id="+objId).forward(request, response);

package web.objects;

import java.io.IOException;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import dao.ObjDetailsDao;

@SuppressWarnings("serial")
public class EditObjectText extends HttpServlet {

 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


  int objId = Integer.parseInt(request.getParameter("objId"));
  String text = (String)request.getParameter("description");

  ObjDetailsDao oddao = new ObjDetailsDao();
   try {
oddao.modifyText(text, objId);
 /////////////
    getServletContext().getRequestDispatcher("/EditObject?id="+objId).forward(request, response);
 ////////////
   } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (ServletException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
        }
      }
}

编辑:我按照建议添加了 throws ServletException, IOException,但这并没有改变错误。

编辑:EditObject servlet 看起来像这样

 @SuppressWarnings("serial")
public class EditObject extends HttpServlet{

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

        int objId = Integer.parseInt(request.getParameter("id"));
        dispPage(objId, request, response);
    }

    private void dispPage(int objId, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{        

// ... lots of code in here
            getServletContext().getRequestDispatcher("/jsp/objectPageEdit.jsp").forward(request, response);

    }
}

另一个编辑:所以基本上我不能做我正在做的事情。我需要的是,用户提交一个发布请求,然后我将他/她推荐回一个使用 Get 方法而不是 Post 的 servlet。我怎样才能在不收到错误的情况下进行此推荐?提前致谢。

最佳答案

(抱歉之前发错了答案,我删掉了)


显然 URL /EditObject 被映射到另一个没有 doPost() 的 servlet 上方法被覆盖。它将在 RequestDispatcher#forward() 上调用也因为当前运行 HTTP 请求的方法是 POST。 默认 HttpServlet#doPost() 实现将返回 HTTP 405。如果您的实际意图是触发 GET 请求,那么 doGet()方法将被调用,那么你应该使用 HttpServletResponse#sendRedirect()相反。

response.sendRedirect("/EditObject?id="+objId);

关于java - HTTP 状态 405 - 此 URL 不支持 HTTP 方法 POST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3577414/

相关文章:

java - 如何从 void 函数中获取值?

java - Findbugs通过参数或clone()分配字节数组值

rest - 405 Method Not Allowed in Jersey 正在返回 Tomcat 的 405 页面

java - 如何使用gradle为servlet创建MANIFEST.MF文件?

python - bottle request.json 在发布时收到 405

spring-boot - 如何在 Spring boot 应用程序的嵌入式 untertow 中禁用 HTTP TRACE

java - 抽象类和接口(interface)在一起?

java - 读取文件时遇到问题

java - HttpServletRequest 中有什么可以用来识别集群中的节点吗?

Java - 使用 Apache Http 客户端发布 GZIP 文件