HTTP 状态 405 - 此 URL 不支持 HTTP 方法 POST
Posted
技术标签:
【中文标题】HTTP 状态 405 - 此 URL 不支持 HTTP 方法 POST【英文标题】:HTTP Status 405 - HTTP method POST is not supported by this URL 【发布时间】:2011-04-04 09:26:59 【问题描述】:当我使用以下代码(如下)时,我收到错误 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。如何在不收到错误的情况下进行此推荐?提前致谢。
【问题讨论】:
处理 /EditObject 的 servlet 在哪里? @Ankur: 哪个类或 servlet 处理 /EditObject url? 您正试图将一个 POST 方法更改为另一个 GET。你这样做的方式是错误的。请求调度程序不查看查询字符串。 /EditObject 下映射的任何内容都无法处理 POST 方法。 @mohammad ...我添加了一些细节,如果需要可以添加更多。谢谢 @Ankur:您需要将 EditObject 中的 doGet 方法更改为 doPost。不确定它是否会影响您的其余代码。 【参考方案1】:(抱歉之前发错答案,我删了).
显然 URL /EditObject
映射到另一个没有覆盖 doPost()
方法的 servlet。它也会在RequestDispatcher#forward()
上调用,因为当前运行 HTTP 请求的方法是 POST。 默认 HttpServlet#doPost()
实现将返回 HTTP 405。如果您的实际意图是在其上触发 GET 请求以便调用 doGet()
方法,那么您应该改用 HttpServletResponse#sendRedirect()
.
response.sendRedirect("/EditObject?id="+objId);
【讨论】:
同意。需要检查 /EditObject url 处理程序【参考方案2】:将 doPost() 添加到您的 EditObject 类:
@SuppressWarnings("serial")
public class EditObject extends HttpServlet
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
process(request, response);
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
process(request, response);
public void process(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);
【讨论】:
...您应该在任何地方将“id”参数重命名为“objId”以使其正常工作。 不需要重命名参数。它以名称id
传递并以名称id
检索。只有变量名确实与它不一致。然而,我同意摆脱那种类似匈牙利语的符号。太丑了。
谢谢,我知道这也是一个很好的技术。
在原始 POST 请求中,参数名称为“objId”,而 EditObject 类中应为“id”。 getServletContext().getRequestDispatcher("/EditObject?id="+objId) 调用中提供的“id”参数是多余的,因为它不用于执行调度。 getServletContext().getRequestDispatcher("/EditObject") 就够了。以上是关于HTTP 状态 405 - 此 URL 不支持 HTTP 方法 POST的主要内容,如果未能解决你的问题,请参考以下文章
HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET [重复]
HTTP 状态 405 - 此 URL 不支持 HTTP 方法 POST
Apache Tomcat HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET [重复]
HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET
HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET - RequestDispatcher 出现错误