Подтвердить что ты не робот

Какая разница между RequestDispatcher.forward() и HttpServletResponse.sendRedirect()?

В чем разница между методами RequestDispatcher forward() и HttpServletResponse sendRedirect()?
Может ли кто-нибудь объяснить пример и наилучшее использование этих методов в реальном времени?

4b9b3361

Ответ 1

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

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

Примеры:

// Sends a temporary redirect to the HTTP client. Only absolute URLs are allowed.
ServletResponse.sendRedirect(String location);


// Delegates one HttpRequest to another dynamic or static resource
HttpRequest.getRequestDispatcher("example.jsp").forward(request, response);


// Includes/enriches current response with another dynamic or static resource
HttpRequest.getRequestDispatcher("example.html").include(request, response);


Еще одно хорошее объяснение можно найти здесь:
Разница между sendRedirect() и forward()

Ответ 2

Запрос пересылается только вперед для запросов к тем же компонентам WEB-приложения, и перенаправление также может быть перенаправлено на один и тот же сайт в разных ресурсах приложения и даже может быть перенаправлено на абсолютный URL-адрес.

Перенаправление может видеть URL целевой страницы, пересылка URL-адреса страницы может видеть только первое посещение, ведь сервер выполняет работу.

Запрос ответа между вызывающими и вызываемыми объектами имеет один и тот же объект запроса и ответа, перенаправление вызывающего и вызываемого лиц относится к двум отдельным запросам и ответам на запрос.

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

Ответ 3

SendRedirect():
Этот метод объявлен в интерфейсе HttpServletResponse

Подпись: void sendRedirect (String url)

Этот метод используется для перенаправления клиентского запроса в другое место для дальнейшей обработки, новое местоположение доступно на другом сервере или в другом контекстном контейнере. Этот веб-контейнер обрабатывает это и передает запрос с помощью браузера, и этот запрос отображается в браузере как новый запрос. Некоторое время это также называется перенаправлением на стороне клиента.

Форвард(): Этот метод объявлен в интерфейсе RequestDispatcher.

Подпись: forward (запрос ServletRequest, ответ ServletResponse)

Этот метод используется для передачи запроса другому ресурсу для дальнейшей обработки на том же сервере, другим ресурсом может быть любой сервлет, jsp-страница - любой вид файла. Этот процесс берет на себя веб-контейнер, когда мы вызываем запрос метода forward отправляется на другой ресурс без информирования клиента, какой ресурс будет обрабатывать запрос, который он упомянул на объекте requestDispatcher, который мы можем получить двумя способами либо с помощью ServletContext, либо Request. Это также называется перенаправлением на стороне сервера.

A RequestDispatcher forward() используется для пересылки одного и того же запроса другому ресурсу, тогда как ServletResponse sendRedirect() - это двухэтапный процесс. В sendRedirect() веб-приложение возвращает ответ клиенту с кодом состояния 302 (перенаправление) с URL-адресом для отправки запроса. Отправленный запрос - это совершенно новый запрос.

B forward() обрабатывается внутри контейнера, тогда как sednRedirect() обрабатывается браузером.

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

D В браузере forward() не известно о фактическом ресурсе обработки, а URL-адрес в адресной строке остается таким же, в то время как в URL-адрес sendRedirect() в адресной строке изменяются на перенаправленный ресурс.

E forward() не может использоваться для вызова сервлета в другом контексте, в этом случае мы можем использовать sendRedirect().

Подробности Объяснение Здесь

Ответ 4

Мы можем использовать диспетчер запросов только тогда, когда другой сервлет, которому пересылается запрос, находится в том же приложении. С другой стороны, Send Redirect может использоваться в обоих случаях, если два сервлета находятся в одном приложении или в разных приложениях.