HTTP Status 405 - метод HTTP POST не поддерживается этим URL - PullRequest
4 голосов
/ 26 августа 2010

Я получаю сообщение об ошибке 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 выглядит следующим образом

 @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.Как я могу сделать это направление без получения ошибки?Заранее спасибо.

Ответы [ 2 ]

8 голосов
/ 26 августа 2010

(извините за неправильный ответ, который я опубликовал ранее, я удалил его) .


Очевидно, что URL /EditObject сопоставлен с другим сервлетом, у которого нет переопределенного метода doPost(). Он также будет вызван RequestDispatcher#forward(), потому что метод текущего HTTP-запроса - POST. Реализация default HttpServlet#doPost() вернет HTTP 405. Если вы на самом деле хотите запустить GET-запрос, чтобы был вызван метод doGet(), тогда вам лучше используйте вместо этого HttpServletResponse#sendRedirect().

response.sendRedirect("/EditObject?id="+objId);
2 голосов
/ 26 августа 2010

Добавьте 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);

    }
}
...