В чем разница между реакцией.sendRedirect() и запрос.getRequestDispatcher().переадресация (запрос, ответ) [дубликат]

этот вопрос уже есть ответ здесь:

у меня проблема с прыжком страницы, когда я использую JAVA, если я использую:

response.sendRedirect("login.jsp")

тогда я получаю этот url:http://localhost:8080/login.jsp

но если я использую

request.getRequestDispathcer("login.jsp").forward(request, response)

тогда я получаю этот url:http://localhost:8080/Shopping/login.jsp ("покупки" - это название моего модуля).

в чем разница?

6 ответов


чтобы просто объяснить разницу,

  response.sendRedirect("login.jsp");

не добавляет contextpath (относится к приложению / модулю, в который входит сервлет)

а, а

 request.getRequestDispathcer("login.jsp").forward(request, response);

будет добавлять contextpath соответствующего приложения

кроме того, перенаправить запрос используется для перенаправления ресурсов на другие серверы или домены. Эта передача задачи управления делегируется браузеру контейнером. То есть перенаправление отправляет заголовок обратно в браузер / клиент. Этот заголовок содержит url ресурса для перенаправления браузером. Затем браузер инициирует новый запрос к заданному url-адресу.

переслать запрос используется для пересылки ресурсов, доступных на сервере, откуда выполняется вызов. Эта передача управления осуществляется контейнером внутри, и браузер / клиент не участвует.


вперед

управление может быть перенаправлено на ресурсы, доступные на сервере, откуда выполняется вызов. Эта передача управления осуществляется контейнером внутри, и браузер / клиент не участвует. Это основное различие между forward и sendRedirect. Когда переадресация завершена, исходные объекты запроса и ответа передаются вместе с дополнительными параметрами, если это необходимо.

редирект

Control можно перенаправить на ресурсы к различным серверам или доменам. Эта передача задачи управления делегируется браузеру контейнером. То есть перенаправление отправляет заголовок обратно в браузер / клиент. Этот заголовок содержит url ресурса для перенаправления браузером. Затем браузер инициирует новый запрос к заданному url-адресу. Поскольку это новый запрос, старый объект запроса и ответа теряется.

например, sendRedirect может передавать управление изhttp://google.com к http://anydomain.com но вперед не делать этого.

'session' не теряется как в прямом, так и в перенаправлении.

чтобы почувствовать разницу между forward и sendRedirect визуально увидеть адресную строку Вашего браузера, в forward вы не увидите переадресованный адрес (так как браузер не участвует) в redirect вы можете увидеть перенаправленный адрес.


просто разница между Forward(запрос ServletRequest, ответ ServletResponse) и sendRedirect(строка url) составляет

вперед():

  1. на forward() метод выполняется на стороне сервера.
  2. запрос передается на другой ресурс на том же сервере.
  3. это не зависит от протокола запроса клиента с forward () метод предоставляется контейнером сервлета.
  4. запрос разделяют целевой ресурс.
  5. в этом методе используется только один вызов.
  6. его можно использовать внутри сервер.
  7. мы не можем видеть переадресованное сообщение, оно прозрачно.
  8. метод forward () быстрее, чем sendRedirect() метод.
  9. объявлено в RequestDispatcher интерфейс.

sendRedirect():

  1. на sendRedirect() метод выполняется в клиенте сторона.
  2. запрос передается на другой ресурс на другой сервер.
  3. на sendRedirect() метод предоставляется под HTTP поэтому его можно использовать только с HTTP клиенты.
  4. новый запрос создается для целевого ресурса.
  5. потребляются два запроса и ответные вызовы.
  6. его можно использовать внутри и вне сервера.
  7. мы можем видеть перенаправленный адрес, он не прозрачен.
  8. на sendRedirect() метод медленнее, потому что при создании нового запроса старый объект запроса теряется.
  9. объявлено в HttpServletResponse.

1.перенаправление возвращает запрос в браузер с сервера, затем повторно отправляет запрос на сервер из браузера.

2.переслать запрос на другой сервлет (servlet to servlet).


Redirect и Request dispatcher-это два разных метода перемещения формы с одной страницы на другую. если мы используем перенаправление на новую страницу, на самом деле новый запрос происходит со стороны клиента на новую страницу. таким образом, мы можем видеть изменение в URL. Поскольку перенаправление является новым запросом, старые значения запроса здесь недоступны.


redirect: верните запрос браузеру / клиенту с сервера, затем повторно отправьте запрос на сервер из браузера / клиента.

forward: отправить запрос другому сервлету (сервлет сервлету) и не отправлять запрос другому браузеру / клиенту .