代码之家  ›  专栏  ›  技术社区  ›  Ankur

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

  •  4
  • Ankur  · 技术社区  · 16 年前

    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

    EDIT: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请求,然后我将他/她带回一个servlet,该servlet使用Get方法而不是post。我怎样才能在不出错的情况下进行转诊?提前谢谢。

    2 回复  |  直到 16 年前
        1
  •  8
  •   BalusC    16 年前

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


    /EditObject doPost() 方法被重写。它会被召唤 RequestDispatcher#forward() 因为当前运行HTTP请求的方法是POST。这个 违约 HttpServlet#doPost() 实现将返回HTTP405。如果您的实际意图是对其发出GET请求 doGet() HttpServletResponse#sendRedirect() 相反。

    response.sendRedirect("/EditObject?id="+objId);
    
        2
  •  2
  •   gawi    16 年前

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