Разница между JSP forward и redirect [дубликат]

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

  • вызов requestdispatcher.forward () vs HttpServletResponse.sendRedirect() 8 ответов

Пожалуйста, объясните разницу между jsp:forward и redirect.
Что происходит в каждом случае?

7 ответов


  • redirect устанавливает статус ответа на 302 [1], а новый url-адрес в Location заголовок и отправляет ответ в браузер. Затем браузер, согласно спецификации http, делает еще один запрос на новый url

  • переадресация происходит полностью на сервере. Контейнер сервлета просто пересылает один и тот же запрос на целевой url-адрес без ведома браузера. Следовательно, вы можете использовать те же атрибуты запроса и тот же запрос параметры при обработке нового url. И браузер не будет знать, что url-адрес изменился (потому что это произошло полностью на сервере)


[1]: это пример отраслевой практики, противоречащей стандарту. Спецификация HTTP / 1.0 (RFC 1945) требовала от клиента выполнения временное перенаправление (оригинальная описательная фраза была " перемещена Временно"), но популярные браузеры реализовали 302 с функциональность 303 см. Другое. Таким образом HTTP / 1.1 добавлен статус коды 303 и 307, чтобы различать эти два поведения. Однако, некоторые веб-приложения и фреймворки используют код состояния 302, как если бы он были 303. источник


Я слышал интересное объяснение перенаправления и вперед. Представьте, что вам нужна помощь вашего друга.Его неважно какая служба. Предположим, ваш друг не может вам помочь, но знает, кто может.

он перенаправит ваш запрос, если он скажет вам: "я не могу справиться с этим, но знаю, кто может.Вот его номер телефона. Зовите его"

Он переадресует ваш запрос, если он скажет вам: "нет проблем" и позвонит этому человеку сам, не заметив вас вовлечение другого человека в управление вашим желанием. Тогда ваш друг получит результат от вашего желания и передаст вам


Redirect также медленнее по сравнению с forward, потому что он должен пройти через браузер и ждать, пока браузер сделает новый запрос, а также, следовательно, заставляя объекты области запроса быть недоступными после перенаправления.


редирект :

  1. пользователь запрашивает ресурс.
  2. ответ отправлен пользователю.
  3. это не запрашиваемый ресурс, это ответ с кодом HTTP 302 и содержит URL запрашиваемого ресурса.
  4. URL может быть таким же или отличаться от запрошенного URL.
  5. браузер клиента делает запрос для ресурса снова с новым URL, на этот раз фактический ресурс отправлен в пользователь.

вперед:

Это процесс простого отображения запрошенного ресурса для пользователя. Это происходит на стороне сервера.


этот пост дает действительно хорошее объяснение о forward vs redirect, используя хороший пример реального мира.

молочник приходит и просит ежемесячную оплату Вам в вашем доме. Здесь дом является контейнером, и вы являетесь ресурсом, существующим в контейнер. Milk man-это клиент или браузер.

Он просит ежемесячный платеж вам, это запрос, сделанный браузер на ресурс A. Если вы заходите в свой дом и спрашиваете ваш мать (другой ресурс B внутри того же контейнера) для наличных денег и вернитесь и доставьте молочнику это называется Вперед.

Если вы попросите молочника поговорить с вашей матерью внутри вашего или попроси молочника поговорить с твоим отцом, который в своем доме. офис (другой домен), то это называется редирект.


при отправке запроса

- объект запроса и ответа передается. -URL-адрес остается прежним.

когда вы перенаправляете запрос на другой JSP / servlets,

-объекты запроса и ответа не передаются в новый объект. - Url изменения в каталоге новой страницы.


+------------------------------------------------+-----------------------------------------------------------------------------+
|                 <jsp:forward>                  |                               sendRedirect()                                |
+------------------------------------------------+-----------------------------------------------------------------------------+
| getRequestDispatcher().forward()               | getRequestDispatcher().sendRedirect()                                       |
| Communication b/w pages directly               | Communication b/w pages are indirectly by extra round trip from HTTP client |
| Communication can happen within web-container  | Communication can happen anywhere                                           |
| Use same Request and Response Object           | Use different Request and Response Object                                   |
+------------------------------------------------+-----------------------------------------------------------------------------+