В чем разница между RequestDispatcher.forward() и HttpServletResponse.sendRedirect()?

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


person Raj    schedule 28.08.2011    source источник


Ответы (4)


Перенаправление — это тип ответа, отправляемого обратно клиенту, тогда как прямое делегирование происходит полностью на стороне сервера, и результат прямого действия возвращается клиенту, как если бы он пришел только из исходного 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()

person dov.amir    schedule 28.08.2011
comment
Примечание. Вы можете выполнить response.sendRedirect("http://www.google.com");, но не HttpRequest.getRequestDispatcher("http://www.google.com");, если только google.com не находится на вашем сервере. ЗАКЛЮЧЕНИЕ: метод forward() работает на стороне сервера, тогда как метод sendRedirect() работает на стороне клиента. - person KNU; 09.05.2014

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

Подпись: void sendRedirect (URL-адрес строки)

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

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

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

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

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

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

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

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

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

Подробное объяснение здесь

person Sameer Kazi    schedule 20.02.2015

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

person Saurabh    schedule 08.07.2015

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

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

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

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

person heroxuguowei    schedule 06.02.2014