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.


Назад Вперёд Содержание
Логотип Oracle  Copyright © 2017, Oracle и/или её дочерних компаний. Все права защищены. Версия перевода 1.0.5 (Java EE Tutorial — русскоязычная версия)