Разница между 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. Источник
Я слышал интересные объяснения перенаправления и пересылки. Представьте, что вам нужен какой-то сервис от вашего друга. Это не имеет значения, какой сервис. Предположим, что ваш друг не может вам помочь, но знает, кто может.
Он перенаправит ваш запрос, если скажет: "Я не могу справиться с этим, но знаю, кто может. Вот его номер телефона. Позвоните ему"
Он перенаправит ваш запрос, если скажет вам: "Нет проблем", и сам позвонит этому человеку, не заметив вас о привлечении другого человека к исполнению вашего желания. Тогда твой друг получит результат исполнения твоего желания и передаст тебе
Перенаправление также медленнее по сравнению с переадресацией, поскольку оно должно проходить через браузер и ждать, пока браузер сделает новый запрос, а также, следовательно, сделать объекты области запроса недоступными после перенаправления.
Редирект:
- Пользователь запрашивает ресурс.
- Ответ отправлен пользователю.
- Это не запрошенный ресурс, это ответ с HTTP-кодом 302 и содержит URL запрошенного ресурса.
- URL может быть таким же или отличаться от запрошенного URL.
- Клиентский браузер снова запрашивает ресурс с новым 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 меняет каталог новой страницы.