Я хочу прервать запрос с помощью RequestDispatcher, и затем я хочу передать запрос другому сервлету - что-то вроде этого:
RequestDispatcher dispatcher = request.getRequestDispatcher("/servlet/some.ThirdPartyServlet" + "?" + "param_name=" + "somevalue");
dispatcher.forward(request, response);
Если входящим запросом был POST, диспетчер запроса будет брать мои новые параметры и включать их в тело сообщения, или это вперед теперь становится ПОЛУЧЕНИЕМ?
Он сохраняет исходный запрос, не изменяя его.
Таким образом, он останется POST, если он был POST.
Я думаю, что вас беспокоит, скорее, доступность параметров переданного запроса (а не атрибутов, как упоминают другие). В этом случае не имеет значения, используете ли вы переадресацию или переадресацию. Но если вы используете переадресацию на другой сервлет
, то будет вызван соответствующий метод, связанный с первоначальным запросом, полученным с помощью 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".
}
Если вы используете пересылку, то управление остается в контейнере сервлета, атрибуты запроса сохраняются, а запрос остается POST. Когда вы используете перенаправление, это вызывает отправку ответа в браузер, заставляя его делать запрос GET, при этом он теряет атрибуты запроса для исходного запроса, потому что GET - это совершенно новый запрос.