Java Platform, Enterprise Edition (Java EE) 8 Учебник по Java EE |
Назад | Вперёд | Содержание |
Веб-компоненты, как и большинство объектов, обычно работают с другими объектами для выполнения своих задач. Веб-компоненты могут сделать это, выполнив следующие действия.
Использование частных вспомогательных объектов (например, компонентов JavaBeans).
Совместное использование объектов, которые являются атрибутами общедоступной области.
Использование базы данных.
Вызов других веб-ресурсов. Механизмы технологии Java Servlet, которые позволяют веб-компоненту вызывать другие веб-ресурсы, описаны в Вызов других веб-ресурсов.
Совместно работающие веб-компоненты обмениваются информацией с помощью объектов, которые поддерживаются в качестве атрибутов четырёх объектов областей видимости. Вы получаете доступ к этим атрибутам с помощью методов getAttribute
и setAttribute
класса, представляющего область видимости. Таблица 18-2 перечисляет объекты областей видимости.
Таблица 18-2 Объекты областей видимости
Область видимости |
Класс |
Доступно с |
Веб-контекст |
|
Веб-компоненты в веб-контексте. Смотрите Доступ к веб-контексту. |
Сессия |
|
Веб-компоненты, обрабатывающие запрос, принадлежащий сессии. Смотрите Поддержание состояния клиента. |
Запрос |
Дочерний тип |
Веб-компоненты, обрабатывающие запрос. |
Страница |
|
Страница JSP, которая создаёт объект. |
На многопоточном сервере к общим ресурсам можно обращаться одновременно. В дополнение к атрибутам объекта области видимости общие ресурсы включают в себя данные в памяти, такие как переменные объекта или класса, и внешние объекты, такие как файлы, соединения с базой данных и сетевые соединения.
Параллельный доступ может возникнуть в нескольких ситуациях.
Несколько веб-компонентов, обращающихся к объектам, хранящимся в веб-контексте.
Несколько веб-компонентов, обращающихся к объектам, хранящимся в сессии.
Несколько потоков внутри веб-компонента обращаются к переменным объекта. Веб-контейнер обычно создаёт поток для обработки каждого запроса. Чтобы гарантировать, что объект сервлета обрабатывает только один запрос за один раз, сервлет может реализовать интерфейс SingleThreadModel
. Если сервлет реализует этот интерфейс, никакие два потока не будут выполняться одновременно в сервисном методе сервлета. Веб-контейнер может гарантировать это, синхронизируя доступ к одному объекту сервлета или поддерживая пул объектов веб-компонента и отправляя каждый новый запрос в свободный объект. Этот интерфейс не предотвращает проблемы синхронизации, возникающие в результате доступа веб-компонентов к общим ресурсам, таким как статические переменные класса или внешние объекты.
Когда к ресурсам можно получить доступ одновременно, они могут использоваться противоречивым образом. Вы можете предотвратить это, управляя доступом, используя методы синхронизации, описанные в документации по потокам на http://docs.oracle.com/javase/tutorial/essential/concurrency/
.
Назад | Вперёд | Содержание |