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


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

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

7 71

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-адресом, на этот раз фактический ресурс отправляется пользователь.

вперед:

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

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

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

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

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

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

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

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

-объекты запроса и ответа не переносятся на новый объект. - 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                                   |
+------------------------------------------------+-----------------------------------------------------------------------------+