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

Разница между включением и форвардом механизма концепции отправки запроса?

Вперед(): Это можно сделать двумя способами с помощью запроса и ServeletContext. Перенаправление запроса с сервлета на другой ресурс (сервлет, JSP файл или файл HTML) на сервере. Вперед делается на серверной, без знаний клиента.

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

Просто

include: будет включать другой файл в наш текущий файл

forward: перенаправляет текущий запрос на страницу пересылки

4b9b3361

Ответ 1

Основное отличие состоит в том, что при использовании пересылки управление передается следующему сервлета /jsp, который вы вызываете, в то время как include сохраняет элемент управления с текущим сервлетом, он просто включает обработку, выполняемую вызывающим сервлетом /jsp (например, выполнение любой out.println или другой обработки).

Ответ 2

Различие между двумя тегами заключается в том, как они работают. Хорошо, я скажем, пример, чтобы вы могли себе это представить.

Предположим, у вас есть две страницы, pageA и pageB. В pageA вы написали тег include. В этом случае элемент управления находился в странице, пока вы не вызвали тег include. В этот point, полный контроль переходит на pageB. Когда это будет сделано, управление будет возвращено pageA начиная со следующей точки кодирования после тега include и продолжая остальную страницу.

Хорошо, чтобы получить гораздо более четкое представление, скажем, что у нас одни и те же страницы, стр. и pageB, но на этот раз мы будем использовать тег forward в pageA, а не include тег. Опять же, управление начнется с страницы А до тех пор, пока мы не назовем pageA, на этом этапе управление передается на pageB, как и тег include. Но разница в том, что происходит, когда pageB завершается. В случае форварда tag, элемент управления снова не возвращается к странице A.

Ответ 3

включить (запрос, ответ);

Если ресурс является статическим, метод include включает программную серверную часть. Если ресурс является веб-компонентом, эффект метода заключается в том, чтобы отправить запрос включенному веб-компоненту, выполнить веб-компонент и затем включить результат выполнения в ответ от содержащего сервлета.

Входящий веб-компонент имеет доступ к объекту запроса, но ограничен тем, что он может сделать с объектом ответа.

  • Он может записать тело ответа и передать ответ.
  • Он не может устанавливать заголовки или вызывать любой метод, например setCookie, который влияет на заголовки ответа.

Часто полезно включать другой веб-ресурс, такой как контент баннера или информация об авторских правах) в ответе, возвращаемом с веб-компонента.

forward (запрос, ответ);

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

Чтобы передать управление другому веб-компоненту, вы вызываете метод forwardDirectory RequestDispatcher. Когда запрос отправляется, URL-адрес запроса устанавливается на путь пересылаемой страницы. Исходный URI и его составные части сохраняются как атрибуты запроса.

javax.servlet.forward.[request-uri|context-path|servlet-path|path-info|query-string]  

Переадресованный метод должен использоваться для предоставления другой ответственности за ответ для пользователя. Если вы уже получили доступ к объекту ServletOutputStream или PrintWriter внутри сервлета, вы не можете использовать этот Способ; это делает IllegalStateException.

Ссылки по теме

Ответ 4

Ключевое различие между ними состоит в том, что метод forward() будет закрывать выходной поток после его вызова, тогда как метод include оставляет выходной поток OPEN.

отвечая на пример:  позволяет иметь страницу сервлета с именем xxx.java и страницу jsp с именем yy.jsp

В yy.jsp

WELCOME to yy.jsp

В xxx.java//с помощью функции forward()

RequestDispatcher rd = request.getRequestDispatcher("yy.jsp"); rd.forward(request,response); out.println("back to servlet"); //this wont b displayed

Выход

WELCOME to yy.jsp 

В xxx.java//с использованием include()

RequestDispatcher rd = request.getRequestDispatcher("yy.jsp"); rd.include(request,response); out.println("back to servlet");

Выход

WELCOME to yy.jsp back to servlet

НО САМЫЙ ВАЖНО НЕ ЕСТЬ НЕ О КОНТРОЛЕ, ПОТОМУ ЧТО МЫ НАЙТИ

System.out.println("console output");

после любого из вызовов .forward() или .include(), вывод консоли будет генерироваться в каждом случае. О его ответе клиенту

Итак, основная часть  если мы обрабатываем компонент на стороне сервера и затем пересылаем JSP или Servlet для создания разметки для клиента, как только этот JSP или Servlet завершили обработку, мы больше не можем обращаться к другим компонентам для создания разметки, которая может быть отправлено клиенту. После того, как мы выполнили форвард, генератор разметки для текущего цикла запроса и ответа завершен.

В качестве альтернативы, с включением, выходной поток остается открытым, поэтому мы можем вызывать столько разных файлов для создания разметки на стороне клиента, которая нам нужна. Таким образом, мы можем включать два или три файла JSP и даже Servlet в цепочку компонентов, которые генерируют разметку на основе клиента. Когда мы используем include, выходной поток не закрывается после вызова.