
- •Обозначения и сокращения
- •введение
- •1. Установка и настройка инструментальных средств
- •1.1. Установка и подготовка к работе операционной системы
- •1.2. Установка программного обеспечения
- •1.3. Создание таблиц в базе данных
- •2. Основы Java EE 6
- •2.1. Распределенные многоуровневые приложения
- •2.2. Контейнеры Java EE
- •2.3. Сервер GlassFish v3
- •2.4. Структура приложения
- •2.5. Конфигурирование приложений
- •2.6. Задание ссылок на ресурсы
- •4. Введение в компоненты Facelets
- •4.1. Веб-страницы
- •4.2. Разработка простого приложения Facelets
- •4.3. Использование шаблонов
- •5. Унифицированный язык записи выражений
- •6.1. Добавление компонент библиотеки HTML на страницу
- •6.2. Использование компонент для таблиц баз данных
- •6.3. Использование тегов библиотеки Core
- •7. Использование конвертеров, слушателей и проверок
- •7.1. Использование стандартных преобразователей
- •7.2. Регистрация слушателей для компонентов
- •8. Внешние объекты (JavaBeans)
- •8.1. Создание класса внешних объектов
- •8.2. Описание свойств бинов
- •8.3. Написание методов внешних бинов
- •8.4. Проверка бинами
- •9.1. Файл конфигурации ресурсов приложения
- •9.2. Упорядочение ресурсов конфигурации приложения
- •9.3. Конфигурирование состояния проекта
- •9.4. Выбор конфигурации бина
- •9.5. Регистрация сообщений об ошибках как пакет ресурса
- •9.7. Конфигурирование правил навигации (Navigation Rules)
- •9.8. Основные требования приложения JavaServer Faces
- •10. Технология Java Servlet
- •11. Введение в Java Persistence API
- •11.1. Требования к классам сущностей
- •11.3. Внедряемые классы в сущностях
- •11.4. Наследование сущностей
- •11.5. Стратегии наследования сущностей с отображением
- •11.6. Управление сущностями
- •11.7. Запросы сущностей
- •12. Примеры хранимых сущностей
- •12.1. Приложение order
- •12.2. Пример получения схемы отношений на основе таблиц БД
- •13.1. Терминология языка запросов
- •13.3. Упрощенный синтаксис языка запросов
- •13.4. Примеры запросов
- •13.5. Запросы с навигацией связанных сущностей
- •13.6. Запросы с другими условными выражениями
- •13.7. Изменение и удаление группы сущностей
- •13.8. Полный синтаксис языка запросов
- •14. Язык запросов Criteria API
- •14.3. Корни запроса
- •14.4. Использование объединения в запросе
- •14.5. Навигация путей в запросах
- •14.6. Ограничения на результаты запроса
- •14.7. Управление результатами запросов
- •14.8. Исполнение запросов
- •15. Связывание ресурсов
- •15.1. Ресурсы и служба имен JNDI
- •15.2. Объекты DataSource и пулы соединений (Connection Pools)
- •15.3. Внедрение ресурсов
- •15.4. Адаптеры ресурсов
- •15.5. Аннотации метаданных
- •16. Безопасность веб-приложений
- •16.1. Краткий обзор
- •16.2. Механизмы обеспечения безопасности
- •16.3. Безопасность сервера предприятия
- •16.4. Использование защищенного соединения SSL
- •18. Пример приложения
- •18.1. Создание проекта веб-приложения
- •18.3.Структура приложения JavaEE 6
- •18.4. Программирование вида для объектов
- •18.5. Дизайн главной страницы
- •18.6. Страница просмотра записей таблицы городов
- •18.7. Страница добавления записей о городах
- •18.8. Страница редактирования записей о городах
- •18.9. Страница удаления записей о городах
- •19. Обработка связей внешних ключей
- •19.1. Разработка класса для вида сущности
- •19.2. Доработка вида для городов
- •19.3. Разработка обзорной страницы
- •19.5. Страница для редактирования записей с внешними ключами
- •20. Дополнительные функции
- •20.1. Сортировка записей таблицы
- •20.2. Контроль за удалением связанных записей
- •20.3. Контроль ввода наименований
- •20.4. Запросы к БД на языке Java Persistence Query Language
- •20.5. Управление страницами при просмотре таблицы
- •20.6. Создание и просмотр отчетов
- •20.7. Использование шаблонов и стилей
- •20.8. Защита приложения паролем
- •Заключение
- •Библиографический список

2.Основы Java EE 6
2.1.Распределенные многоуровневые приложения
Платформа Java EE использует модель многоуровневого распределенного при-
ложения [1–3]. Логически приложение разделено на компоненты в соответствии с их функциональностью. Различные компоненты, составляющие приложение Java EE,
могут быть установлены на различных компьютерах в зависимости от их уровня (кли-
ент, сервер, СУБД) в многоуровневой среде Java EE, которой данный компонент при-
надлежит.
Приложение- |
Веб- |
клиент |
приложение |
JSPВеб-
страницы уровень Сервер
Бизнесуровень
Рис. 2.1. Многоуровневые приложения
На рис. 2.1 представлены два приложения Java EE, содержащие различные уровни, соответствующие их месту в системе разделения функций.
•Компоненты клиентского уровня работают на клиентской машине. В первом
приложении это страницы, содержащие статические тексты и ссылки, во
втором тексты и ссылки формируются логикой работы приложения.
•Компоненты веб-уровня работают на сервере Java EE и представлены либо
сервлетами, либо страницами JSP или JSF, выполняющими генерирование
документов, отправляемых клиенту.
•Компоненты бизнес-уровня работают на сервере Java EE и являются про-
межуточным звеном между источниками информации и генераторами со-
держимого страниц. Они занимаются аналитической обработкой, форматированием, перекодировкой и другими функциями.
•Программное обеспечение уровня корпоративной информационной систе-
мы (EIS) работает на EIS-сервере и является классической СУБД.
30
Приложение Java EE может содержать, кроме обычных страниц HTML, аппле-
ты — программы, написанные на языке Java с использованием графического интерфейса (GUI), позволяющие существенно расширить круг решаемых задач. Апплеты
пишутся и компилируются как обычные программы-классы с использованием би-
блиотеки AWT, пересылаются на машину клиента и там исполняются на виртуаль-
ной машине платформы браузера. Особую важность апплеты имеют при вводе и
выводе графической информации, так как стандартные средства языка HTML не поддерживают эти функции в полном объеме.
Одна из главных задач сервера — обеспечить одновременное обслуживание
большого числа клиентов за счет распределения параллельных процессов обработки
запросов по потокам. Инкапсуляция обработки запроса в потоке позволяет програм-
мисту писать прикладную программу, не заботясь о деталях параллельного программирования и контроле блокировок общих ресурсов.
Уровень сервера и клиента может включать компоненты JavaBeans —
программы-посредники для преобразования данных. Компоненты JavaBeans — эк-
земпляры обычных классов, содержащие приватные переменные экземпляра и ме-
тоды групп get и set для доступа к свойствам, хранимым в переменных экземпляра. Следует обратить внимание на принятые соглашения. Имена методов после слов get/set должны продолжаться с заглавной буквы, а имена свойств объекта в выраже-
ниях — начинаться со строчной. Например: метод getProp() для свойства с именем prop в выражении «#{obj.prop}».
Жизненный цикл веб-приложения
Приложение сети состоит из компонентов, статических файлов ресурсов (на-
пример, рисунков), классов и библиотек. Контейнер обеспечивает много сервисов, что
позволяет повысить возможности компонентов и легче сделать их работу. Тем не менее, поскольку приложение сети должно взять эти сервисы на себя, процесс создания и выполнения приложения отличается от традиционных отдельных классов Java.
Процесс создания, развертывания и выполнения веб-приложений может описываться следующими шагами:
1.Разработка кода компонента.
2.Разработка дескриптора развертывания приложения.
3.Компиляция прикладных веб-компонентов и вспомогательных классов, используемых компонентами.
4.Дополнительная упаковка приложения в развертываемый архив.
5.Развертывание веб-приложения на сервере заказчика.
6.Вызов приложения в браузере набором URL и отправкой запроса на сервер.
2.2. Контейнеры Java EE
Одним из важных понятий в архитектуре Java EE являются контейнеры.
Контейнеры являются коллекциями компонентов и обеспечивают интерфейс между
компонентом и низкоуровневыми платформо-независимыми функциональными воз-
можностями, поддерживающими компонент. До того как веб-компонент, корпоратив-
ный компонент или компонент клиентского приложения может быть выполнен, он должен быть скомпонован в приложение Java EE и размещен внутри своего контейнера.
Процесс компоновки включает в себя определение установок контейнера для каждогокомпонентавприложенииJava EE идлясамогоприложенияJava EE.Установки
31
контейнера настраивают внутреннюю поддержку, обеспечиваемую Java EE сервером,
которая включает в себя такие сервисы, как безопасность, управление транзакциями, JNDI-поиск и удалённая связь. Вот некоторые из основных положений:
•Модель безопасности Java EE позволяет конфигурировать веб-компонент или корпоративный компонент так, что доступ к системным ресурсам разре-
шается только авторизованным пользователям.
•Модель транзакции Java EE позволяет определять взаимосвязи между мето-
дами, которые составляют простую транзакцию, так, что все методы в одной
транзакции интерпретируются как один модуль.
•Сервисы поиска JNDI обеспечивают унифицированный интерфейс к различ-
ным сервисам каталогов и имен на предприятии, так что компоненты приложения получают доступ к этим сервисам.
•Модель удалённого доступа Java EE управляет низкоуровневыми взаимос-
вязями между клиентами и корпоративными компонентами. После того как
корпоративный компонент создаётся, клиент вызывает его методы так, как если бы они находились на той же виртуальной машине.
Архитектура Java EE обеспечивает средства настройки конфигурации сервисов.
Это означает, что компоненты в приложении Java EE могут вести себя по-разному, в
зависимости от места их размещения. Например, корпоративный компонент может иметь установки безопасности, дающие ему определённый уровень доступа к базе данных в одном рабочем окружении и иной уровень доступа — в другом.
Контейнер также управляет неконфигурируемыми сервисами, такими как время
жизни корпоративного компонента и сервлета, ресурсный пул (объединение ресур-
сов) связи с БД, хранение данных, доступ к API платформы Java EE. Хотя хранение данных является неконфигурируемым сервисом, архитектура Java EE позволяет замещать хранение, управляемое контейнером, включением соответствующего кода в реализацию вашего корпоративного компонента в тех случаях, когда вы желаете по-
лучить больший контроль, чем обеспечивается по умолчанию. Например, можно ис-
пользовать хранение, управляемое компонентом, для реализации ваших собственных методов поиска или для создания пользовательского кеша базы данных.
Различают следующие виды контейнеров Java EE:
•Сервер Java EE является частью времени исполнения приложения Java EE;
предоставляет EJB- и веб-контейнеры.
•Контейнер Enterprise JavaBeans (EJB) управляет исполнением корпоратив-
ных компонентов для приложений Java EE. Корпоративные компоненты и их контейнер выполняются на сервере Java EE.
•Веб-контейнер управляет исполнением JSP-страниц и сервлетов для при-
ложения Java EE. Веб-компоненты и их контейнер выполняются на сервере
Java EE.
•Контейнер клиентского приложения управляет исполнением компонентов
клиентского приложения. Клиентские приложения и их контейнер выполняют-
ся на стороне клиента.
•Контейнер апплетов: управляет выполнением апплетов. Состоит из веб-
браузера и Java plug-in, выполняющихся совместно на клиенте.
Приложение Java EE и каждый из его модулей имеет собственный дескриптор
развертывания (файл web.xml). Дескриптор развертывания является XML-документом
с расширением .xml, описывающим установки компонента. В состав проекта обычно входят следующие папки.
32
Директория МЕТА-INF содержит файл MANIFEST.MF, который используется,
чтобы задавать пути класса для зависимых файлов JAR, которые существуют в других проектах на том же предприятии. Записи в этом файле во время прогона проекта
класса изменяют пути и Java-настройки, чтобы включать файлы JAR.
Основанная на Sun Microsystems Java Servlet 2.3 Specification, директория
WEB-INF содержит главные ресурсы для приложения, включая файл web.xml, ди-
ректории classes и lib. Директория classes содержит исходный код проекта Java для классов, фасетов и сервлетов. Там же содержатся компилированные классы. Обычно
в этой папке располагаются вложенные папки пакетов с их содержимым, например:
/WEB-INF/classes/com/mycorp/servlets/MyServlet.class.
Директория lib содержит все архивы JAR, на которые ссылается приложение.
Любые классы в файлах .jar, установленных в этой директории, будут доступны для
ваших прикладных программ. Кроме того, в этой папке должны быть «виртуальные»
файлы библиотеки JAR сетевого проекта, которые физически не находятся в проекте, но связаны с проектом Java, находясь где-нибудь в рабочей области.
2.3. Сервер GlassFish v3
Sun GlassFish Enterprise Server v3 полностью совместим с платформой
Java EE 6. Сервер приложений включает ряд инструментов, не являющихся непосредственно частью платформы Java EE 6, но предназначенных для использования разработчиками приложений, например, средств доступа к ресурсам (табл. 2.1).
|
Таблица 2.1 |
|
|
Утилиты сервера приложений |
|
|
|
|
Инструмент |
Описание |
|
|
|
|
Admin Console |
Администрирование с графическим интерфейсом для остановки |
|
сервера и управления пользователями, ресурсами и приложениями |
||
asadmin |
Для администрирования сервера в командной строке: |
|
запуск и остановка, управление пользователями, ресурсами |
||
|
и приложениями |
|
appclient |
Для запуска клиентских приложений из jar-файлов |
|
capture- |
Для извлечения схем из баз данных и записи их |
|
schema |
в файлы для дальнейшего использования |
|
package- |
Для упаковки приложений в jar-файлы |
|
appclient |
|
|
JavaDB |
Копия встроенного сервера баз данных, написанного |
|
database |
целиком на Java, позволяющего хранить данные в архивах |
|
verifier |
Для верификации дескрипторов развертывания |
|
xjc |
Для преобразования или связывания исходной схемы |
|
в классы содержимого на языке Java |
||
|
||
schemagen |
Для создания файла со схемой со ссылками на классы |
|
wsimport |
Для генерации структур заданного WSDL-файла |
|
wsgen |
Для чтения классов и генерации структур |
|
для развертывания и вызова |
||
|
33