Разница между JSP forward и redirect

Пожалуйста, объясните разницу между 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. Источник

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

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

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

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

Редирект:

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

Вперед:

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

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

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

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

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

+-------------------------------------------------------------------------+-----------------------------------------------------------------------------+
|                             Forwards   vs.                              |                                  Redirects                                  |
+-------------------------------------------------------------------------+-----------------------------------------------------------------------------+
| ServletContext.getRequestDispatcher(location).forward(request,response) | httpServletResponse.sendRedirect(location)                                  |
| Communication between pages directly                                    | Communication b/w pages are indirectly by extra round trip from HTTP client |
| Communication happens within web-container                              | Communication happens outside web-container                                 |
| Use same Request and Response Object                                    | Use different Request and Response Object                                   |
+-------------------------------------------------------------------------+-----------------------------------------------------------------------------+

Когда вы отправляете запрос,

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

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

Объекты -request и response не переносятся на новый объект. -Url меняет каталог новой страницы.

Другие вопросы по тегам