include(request, response);
Java Platform, Enterprise Edition (Java EE) 8 Учебник по Java EE |
Назад | Вперёд | Содержание |
Веб-компоненты могут вызывать другие веб-ресурсы как косвенно, так и напрямую. Веб-компонент косвенно вызывает другой веб-ресурс путём встраивания URL, который указывает на другой веб-компонент в содержимом, возвращаемом клиенту. Во время выполнения веб-компонент напрямую вызывает другой ресурс, включая содержимое другого ресурса или перенаправляя запрос другому ресурсу.
Чтобы вызвать ресурс, доступный на сервере, на котором выполняется веб-компонент, сначала необходимо получить объект RequestDispatcher
с помощью метода getRequestDispatcher("URL")
. Вы можете получить объект RequestDispatcher
из запроса или веб-контекста. Тем не менее, два метода имеют немного различное поведение. Метод принимает путь к запрашиваемому ресурсу в качестве аргумента. Запрос может принимать относительный путь (то есть тот, который не начинается с /
), но веб-контекст требует указания абсолютного пути. Если ресурс недоступен или если сервер не реализовал объект RequestDispatcher
для этого типа ресурса, getRequestDispatcher
вернёт null. Ваш сервлет должен быть готов к такому результату.
Часто бывает полезно включить в ответ, возвращаемый веб-компонентом, другой веб-ресурс, например содержимое баннера или информацию об авторских правах. Чтобы включить другой ресурс, вызовите метод include
объекта RequestDispatcher
:
include(request, response);
Если ресурс статический, метод include
включает программные включения на стороне сервера. Если ресурс является веб-компонентом, эффект метода состоит в том, чтобы отправить запрос включённому веб-компоненту, выполнить веб-компонент, а затем включить результат выполнения в ответ от содержащегося в нём сервлета. Включённый веб-компонент имеет доступ к объекту запроса, но ограничен в том, что он может делать с объектом ответа.
Он может записать тело ответа и зафиксировать ответ.
Он не может устанавливать заголовки или вызывать любой метод, такой как setCookie
, который влияет на заголовки ответа.
В некоторых приложениях может потребоваться, чтобы один веб-компонент выполнял предварительную обработку запроса, а другой компонент генерировал ответ. Например, вы можете захотеть частично обработать запрос, а затем перенести его в другой компонент, в зависимости от характера запроса.
Чтобы передать управление другому веб-компоненту, нужно вызвать метод forward
у RequestDispatcher
. Когда запрос пересылается, URL запроса устанавливается на путь перенаправленной страницы. Исходный URI и его составные части сохраняются как следующие атрибуты запроса:
javax.servlet.forward.request_uri
javax.servlet.forward.context_path
javax.servlet.forward.servlet_path
javax.servlet.forward.path_info
javax.servlet.forward.query_string
Метод forward
должен использоваться, чтобы передать другому ресурсу ответственность за формирование ответа пользователю. Если вы уже получили доступ к объекту ServletOutputStream
или PrintWriter
внутри сервлета, вы не можете использовать этот метод. В этом случае выдаётся IllegalStateException
.
Назад | Вперёд | Содержание |