В чем разница между RequestDispatcher.forward () и HttpServletResponse.sendRedirect ()? [дубликат]
На этот вопрос уже есть ответ здесь:
В чем разница между RequestDispatcher S forward() и HttpServletResponse S 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 ()
SendRedirect ():
Этот метод объявлен в интерфейсе HttpServletResponseПодпись: void sendRedirect (String url)
Этот метод используется для перенаправления запроса клиента в другое место для дальнейшей обработки, новое место доступно на другом сервере или в другом контексте.наш веб-контейнер обрабатывает это и передает запрос с помощью браузера, и этот запрос отображается в браузере как новый запрос. Некоторое время это также называется как перенаправление на клиентскую сторону.
Вперед (): Этот метод объявлен в интерфейсе RequestDispatcher.
Подпись: forward (ServletRequest request, ServletResponse response)
Этот метод используется для передачи запроса на другой ресурс для дальнейшей обработки внутри того же сервера, другим ресурсом может быть любой сервлет, jsp-страница любого вида файла.Этот процесс выполняется веб-контейнером, когда мы вызываем метод forward, запрос отправляется на другой ресурс без информирования клиента, какой ресурс будет обрабатывать запрос, он был упомянут в объекте requestDispatcher, который мы можем получить двумя способами либо с помощью ServletContext, либо с помощью запроса. Это также называется перенаправлением на сервер.
RequestDispatcher forward() используется для пересылки того же запроса на другой ресурс, в то время как ServletResponse sendRedirect () - это двухэтапный процесс. В sendRedirect () веб-приложение возвращает ответ клиенту с кодом состояния 302 (redirect) с URL для отправки запроса. Отправленный запрос-это совершенно новый запрос.
B forward() обрабатывается внутри контейнера, в то время как sednRedirect() обрабатывается браузером.
C мы должны использовать forward () при доступе к ресурсам в том же приложении, потому что это быстрее, чем метод sendRedirect (), который требует дополнительного вызова сети.
D в forward() браузер не знает о фактическом ресурсе обработки и URL в адресе строка остается прежней, тогда как в sendRedirect() URL в адресной строке изменяется на перенаправленный ресурс.
E forward () нельзя использовать для вызова сервлета в другом контексте, в этом случае мы можем использовать только sendRedirect ().
Подробное Объяснение Здесь
Запрос пересылается только на те же компоненты веб-приложения, а перенаправление также может быть перенаправлено на тот же сайт в разных ресурсах приложения и даже может быть направлено на абсолютный URL.
Перенаправление может видеть URL целевой страницы, перенаправление URL страницы может видеть только первое посещение, в конце концов, есть сервер, чтобы сделать работу.
Ответ на запрос между вызывающим и вызываемым объектами используются одни и те же объекты запроса и ответа, перенаправление вызывающего абонента и вызываемого абонента относится к двум отдельным процессам запроса доступа и ответа.
Должен быть добавлен после возврата Jump redirect, иначе jump хоть и страница, но также выполняет переход за оператором, переадресация выполняется jump page, следующий код не будет выполнен.
Мы можем использовать диспетчер запросов только в том случае, если другой сервлет, на который направляется запрос, находится в том же приложении. С другой стороны, перенаправление Send может использоваться в обоих случаях, если два сервлета находятся в одном приложении или в разных приложениях.
Comments