RequestDispatcher вперед поддерживают метод HTTP исходного запроса?

Я хочу прервать запрос с помощью RequestDispatcher, и затем я хочу передать запрос другому сервлету - что-то вроде этого:

RequestDispatcher dispatcher = request.getRequestDispatcher("/servlet/some.ThirdPartyServlet" + "?" + "param_name=" + "somevalue");
dispatcher.forward(request, response);

Если входящим запросом был POST, диспетчер запроса будет брать мои новые параметры и включать их в тело сообщения, или это вперед теперь становится ПОЛУЧЕНИЕМ?

14
задан skaffman 28 September 2010 в 17:56
поделиться

3 ответа

Он сохраняет исходный запрос, не изменяя его.

Таким образом, он останется POST, если он был POST.

15
ответ дан 1 December 2019 в 07:19
поделиться

Я думаю, что вас беспокоит, скорее, доступность параметров переданного запроса (а не атрибутов, как упоминают другие). В этом случае не имеет значения, используете ли вы переадресацию или переадресацию. Но если вы используете переадресацию на другой сервлет , то будет вызван соответствующий метод, связанный с первоначальным запросом, полученным с помощью HttpServletRequest # getMethod () . Если это POST, то будет вызвана doPost () . Вы по-прежнему можете получить доступ к дополнительным параметрам в строке запроса обычным способом с помощью HttpServletRequest.getParameter () .

Итак, в основном следующее в servlet1:

protected void doPost(HttpServletRequest request, HttpServletResponse response) {
    request.getRequestDispatcher("servlet2?foo=bar").forward(request, response);
}

может обрабатываться servlet2 следующим образом:

protected void doPost(HttpServletRequest request, HttpServletResponse response) {
    String foo = request.getParameter("foo"); // Returns "bar".
}
15
ответ дан 1 December 2019 в 07:19
поделиться

Если вы используете пересылку, то управление остается в контейнере сервлета, атрибуты запроса сохраняются, а запрос остается POST. Когда вы используете перенаправление, это вызывает отправку ответа в браузер, заставляя его делать запрос GET, при этом он теряет атрибуты запроса для исходного запроса, потому что GET - это совершенно новый запрос.

7
ответ дан 1 December 2019 в 07:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: