- •Обозначения и сокращения
- •введение
- •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. Защита приложения паролем
- •Заключение
- •Библиографический список
Запуск сервера приложений администратором выполняется командой asadmin start-domain.
Домен (по умолчанию domain1) — набор экземпляров приложений со следую-
щими атрибутами:
•общий порт для приложений (по умолчанию 8080);
•общий порт для управления 4848;
•имя администратора и пароль.
Остановка сервера производится командой asadmin stop-domain.
Запуск консоли администратора выполняется из браузера запросом URL http://localhost:4848/asadmin/.
2.4.Структура приложения
Вархитектуре Java EE веб-компоненты и статические файлы данных, например, рисунки, называются ресурсами. Веб-модуль — минимальный блок для развер-
тывания и использования. Он может содержать следующие файлы:
•классы утилит сервера (доступ к базам данных, обработка платежных карт и
др.). Часто это компоненты архитектуры JavaBeans;
•классы клиентской части приложения (апплеты и утилиты).
Веб-модуль имеет специальную структуру. Верхний уровень — это корень при-
ложения, содержащий XHTML-страницы, клиентские классы, архивы, статические ре-
сурсы. Корень содержит папку с именем WEB-INF, которая имеет следующие файлы
ипапки:
•web.xml — дескриптор развертывания приложения;
•дескрипторы файлов библиотек тегов;
•classes — папка для классов серверной части приложения (сервлеты, утили-
ты, компоненты JavaBeans);
•tags — папка с файлами тегов, являющимися реализацией библиотек тегов;
•lib — папка с архивами JAR для использования в классах серверной части.
Если ваш модуль сети содержит только страницы XHTML и статические файлы, то не требуется включать файл web.xml. Вы можете также создать специализированные подкаталоги (директории пакетов) в корне приложения или в директории
/ WEB-INF/classes.
Приложение может иметь вид JAR-архива, но с расширением WAR. В этом
случае архив должен содержать дескриптор оперативного (runtime) развертывания —
файл sun-web.xml, расположенный в папке WEB-INF. Это XML-файл с информацией о
корневой папке приложения, отображениях используемых клиентами имен на ресур-
сы сервера.
Структура веб-модуля, способного быть развернутым на веб-сервере, приведе-
на на рис. 2.2. Упаковка веб-модуля в WAR-архив производится доступными для про-
граммиста инструментами. В главе 17 описана утилита Ant, позволяющая создавать
такие архивы из структур папок, показанных на рис. 2.2.
Развертывание приложения можно выполнить несколькими способами:
•копированием WAR-файла в папку domain-dir/autodeploy;
•использованием консоли администратора;
•использованиемутилитыAnt ссоответствующимфайломкомпоновки(см.главу17).
34
веб-модуля
Рис. 2.2. Структура веб-модуля
2.4.1. Отладка приложений
Основным способом отладки приложений является анализ журнальных сообщений в файле /logs/server.log, содержащем как сообщения сервера, так и сообщения приложения, направляемые туда методом System.out.println из программ на языке
Java, и в файле ServletContext.log.
2.4.2. Архивирование веб-модуля
Модуль должен быть упакован в WAR-файл, если вы хотите передавать вебмодуль заказчикам. Вы упаковываете веб-модуль в WAR, выполняя команду jar в директории веб-модуля или используя утилиту Ant или средство NetBeans IDE по выбору.
Для построения архива средствами NetBeans IDE нужно выполнить следующие
шаги:
1.Выбрать File→Open Project.
2.В диалоге Open Project перейти в папку проекта.
3.Установить переключатель Open asMain Project.
4.Кликнуть Open Project.
5.На закладке Projects кликнуть правой кнопкой по проекту и выбрать Build.
Развертывание WAR-файла производится несколькими способами по выбору:
1)копированием WAR в директорию domain-dir/autodeploy/;
2)использованием консоли администратора;
3)выполнением asadmin или ant для развертывания WAR;
4)использованием NetBeans IDE.
35
Корневой контекст (context root) идентифицирует веб-приложение на сервере
Java EE. Он определяется, когда вы развертываете веб-модуль. Корневой контекст
должен начаться с первоначального символа «слэш» (/) и заканчиваться концом строки. В веб-модуле, упакованном для развертывания на сервере, контекстный корень
помещается в файл sun-web.xml.
Чтобы редактировать корневой контекст, сделайте следующее:
1.Расширьте дерево проекта в окне Projects NetBeans IDE.
2.Расширьте узлы Web Pages и WEB-INF проекта.
3.Дважды щелкните по sun-web.xml.
4.В панели редактора выберите Edit As XML.
5.Редактируйте элемент context root.
Для того чтобы развернуть WAR в утилите asadmin, откройте терминальное
окно и выполните команду:
asadmin deploy full-path-to-war-file
Для того чтобы развертывать WAR средством Ant, откройте терминальное окно,
перейдите в директорию, где вы построили и упаковали WAR, и выполните команду ant deploy
Для развертывания WAR в среде NetBeans IDE нужно выполнить следующие
действия:
1.Выбрать File→Open Project.
2.В диалоге Open Project перейти в проект и открыть его.
3.На закладке Projects правой кнопкой кликнуть по проекту и выбрать
Deploy.
2.5. Конфигурирование приложений
Приложения конфигурируются настройкой элементов в дескрипторе раз-
вертывания.
2.5.1. Отображение адреса запроса (URL) в веб-компоненты
Когда запрос получен контейнером сервера, он должен определить, какой компонент будет обрабатывать запрос. Это делается с помощью отображения адреса URL запроса в веб-приложение и веб-компонент. Путь URL содержит контекстный корень и псевдоним:
http://host:port/context-root/alias
Псевдоним идентифицирует компонент, который должен обработать запрос.
Путь псевдонима должен начаться с форвардного слеша (/) и заканчиваться концом строки или шаблоном с расширением (например, *.jsp). Вы можете отредактировать
файл web.xml в NetBeans IDE следующим образом.
Чтобы установить дисплейное имя:
1)кликнуть General в редакторе для открытия общего вида;
2)ввести имя в поле DisplayName.
Чтобы задать отображение сервлетов:
1)кликнуть Servlets в редакторе и открыть просмотр сервлетов;
2)кликнуть Add Servlet;
3)в диалоге Add Servlet ввести имя в поле ServletName;
36
4)ввести значение servlets.имя в поле Servlet Class;
5)ввести /<name> в поле URL Pattern;
6)нажать кнопку OK;
7)повторить для всех других сервлетов.
2.5.2. Задание файла приглашения (WelcomeFiles)
Механизм файлов «Добро пожаловать» позволяет определять список фай-
лов, используемых для добавления в URL запроса при отсутствии имени файла-
обработчика (называется правильный частичный запрос). Например, вы определите файл приглашения welcome.html. Когда клиент просит URL, как, например, host:port/ webapp/directory, где директория не отображена в servlet, или страницу XHTML, то кли-
енту будет отправлен файл host:port/webapp/directory/welcome.html.
Если контейнер сети получает правильный частичный запрос, он изучает спи-
сок файлов «добро пожаловать», добавляет в частичный запрос каждый файл «добро пожаловать» в определённом порядке и проверяет, подходит ли статический ресурс
или servlet для отображения в запрос URL. Контейнер сети посылает запрос в первый
соответствующий ресурс WAR. Если файл «добро пожаловать» не определен, то сер-
вер использует файл index.xhtml по умолчанию. Если нет файла «добро пожаловать»
и файла index.xhtml, то сервер возвращает листинг директории.
2.5.3. Задание параметров инициализации
Компоненты в веб-модуле разделяют объект, который представляет их прикладной контекст. Вы можете передать параметры инициализации в контекст или в вебкомпонент. Чтобы добавить контекстный параметр в NetBeans IDE, нужно сделать
следующее:
1)открыть проект;
2)распахнуть узел проекта в окне Projects;
3)распахнуть узел Web Pages и WEB-INF;
4)дважды щелкнуть web.xml;
5)вызвать закладку General в редакторе;
6)выбрать узел Context Parameters;
7)нажать Add;
8)в диалоге Add Context Parameter:
•ввести имя контекстного объекта в поле ParamName;
•ввести параметр, передаваемый контекстному объекту в поле Param Value;
•нажать OK.
Кроме того, вы можете напрямую отредактировать XML-файл с именем web. xml, щелкая по закладке XML редактора, чтобы добавить тег контекстного параметра context-param, содержащий два следующих элемента:
•param-name для задания context object;
•param-value для задания передаваемого параметра в объект контекста.
2.5.4. Задание отображения ошибок
Когда происходит ошибка в процессе выполнения приложения, вы можете пере-
дать пользователю специфический экран сообщения об ошибке в зависимости от типа
ошибки. Можно задать страницу сообщений об ошибках для любого кода статуса ответа или программного исключения.
37