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