В чем разница между методом forward()
RequestDispatcher
и методом sendRedirect()
HttpServletResponse
?
Может ли кто-нибудь объяснить на примере и лучше всего использовать эти методы на примере в реальном времени?
В чем разница между RequestDispatcher.forward() и HttpServletResponse.sendRedirect()?
Ответы (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()
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().
Мы можем использовать диспетчер запросов только тогда, когда другой сервлет, на который перенаправляется запрос, находится в том же приложении. С другой стороны, перенаправление отправки можно использовать в обоих случаях, если два сервлета находятся в одном и том же приложении или в разных приложениях.
Запрос перенаправляется только на те же компоненты веб-приложения, а перенаправление также может быть перенаправлено на один и тот же сайт в разных ресурсах приложения и даже может быть направлено на абсолютный URL-адрес.
Перенаправление может видеть URL-адрес целевой страницы, перенаправление URL-адреса страницы можно увидеть только при первом посещении, в конце концов, есть сервер для выполнения этой работы.
Ответ на запрос между вызывающим и вызываемым объектами совместно использует одни и те же объекты запроса и ответа, перенаправление вызывающего и вызываемого объектов принадлежит двум отдельным процессам запроса и ответа на доступ.
Должен быть добавлен после возврата перенаправления перехода, в противном случае переход через страницу, но также выполняется переход за оператором, выполняется переадресация страницы перехода, следующий код не будет выполняться.