В чем разница между RequestDispatcher.forward () и HttpServletResponse.sendRedirect ()? [дубликат]



На этот вопрос уже есть ответ здесь:



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

Может ли кто-нибудь объяснить на примере и лучшее использование этих методов с примером реального времени?

748   4  

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

    Ничего не найдено.