Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HTTP状态405-此URL不支持HTTP方法POST_Java_Servlets_Http Status Code 405 - Fatal编程技术网

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);

    }
}