Java HTTP状态405-此URL不支持HTTP方法POST
当我使用以下代码(如下)时,我收到错误Java HTTP状态405-此URL不支持HTTP方法POST,java,servlets,http-status-code-405,Java,Servlets,Http Status Code 405,当我使用以下代码(如下)时,我收到错误HTTP状态405-此URL不支持HTTP方法POST。。。引起问题的行(显然)是getServletContext().getRequestDispatcher(“/EditObject?id=“+objId”).forward(请求,响应) 编辑:我按照建议添加了抛出ServletException,IOException,但这并没有改变错误 编辑:EditObject servlet如下所示 @SuppressWarnings("serial") p
HTTP状态405-此URL不支持HTTP方法POST
。。。引起问题的行(显然)是getServletContext().getRequestDispatcher(“/EditObject?id=“+objId”).forward(请求,响应)代码>
编辑:我按照建议添加了抛出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);
}
}
另一个编辑:所以基本上我不能做我正在做的事情。我需要的是,用户提交一个post请求,然后我将他/她引用回一个使用Get方法而不是post的servlet。我如何才能在不出错的情况下进行此转诊?提前谢谢。(很抱歉我之前发布了错误的答案,我删除了它)
显然,URL/EditObject
映射到另一个未重写方法的servlet上。它也会被调用,因为当前运行HTTP请求的方法是POST。默认的HttpServlet#doPost()
实现将返回HTTP 405。如果您的实际意图是对其发出GET请求,以便调用该方法,那么您应该改为使用
将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);
}
}
处理/EditObject的servlet在哪里?@Ankur:哪个类或servlet处理/EditObject url?您正在尝试将POST方法更改为另一个GET。你这样做是不对的。请求分派器不查看查询字符串。无论在/EditObject下映射什么,都无法处理POST方法。@mohammad。。。我添加了一些细节,如果需要可以添加更多。Thanks@Ankur:您需要将EditObject中的doGet方法更改为doPost。不确定它是否会影响代码的其余部分。同意。需要检查/EditObject url处理程序…您应该将“id”参数重命名为“objId”,以使其正常工作。不需要重命名参数。它以名称id
传递,并以名称id
检索。只有variablename确实与它不一致。不过,我同意去掉匈牙利式的符号。这很难看。谢谢,我可以看出这也是一种很好的技术。在最初的POST请求中,参数名是“objId”,而EditObject类中需要“id”。getServletContext().getRequestDispatcher(“/EditObject?id=“+objId”)调用中的“id”参数提供是多余的,因为它不用于执行分派。getServletContext().getRequestDispatcher(“/EditObject”)就足够了。
response.sendRedirect("/EditObject?id="+objId);
@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);
}
}