- •Обозначения и сокращения
- •введение
- •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.Раскройте узлы Web страницы и WEB-INF проекта.
3.Сделайте двойной щелчок по faces-config.xml.
4.После открытия faces-config.xml в подокне редактора сделайте щелчок пра-
вой клавишей мыши в подокне редактора.
5.Выберите JavaServer Faces→Add Navigation Rule.
6.В диалоге Add Navigation Rule:
а) войдите на страницу, которая представляет запуск просмотра для этих
правил навигации;
б) сделайте щелчок по кнопке «Добавить».
7.Сделайте щелчок правой клавишей мыши в подокне редактора.
8.Выберите JavaServer Faces → Add Navigation Case.
9.В диалоговом окне Add Navigation Case:
а) из меню From View, выберите страницу, которая представляет стартовый
вид для правила навигации (из шага 6a);
б) (дополнительно) в поле From Action введите метод действия, вызывае-
мый при активизации компонента, который инициировал навигацию;
в) (дополнительно) в поле From Outcome введите логическую строку результата, на который ссылается активированный компонент из своего атрибу-
та action;
г) из меню To View выберите страницу, которая будет открыта, если этот случай обнаружен системой навигации;
д) сделайте щелчок по кнопке «Добавить».
Правила навигации по умолчанию
НачинаясJavaServer Faces 2.0,подразумевающиесяправиланавигациидоступ-
ны для приложений Facelets. Подразумевающиеся правила навигации используются, если никакие правила навигации не сконфигурированы в файлах конфигурации.
Когда вы добавляете UI-компонент, как например, commandButton, и назначаете страницу как значение для свойства action, обработчик навигации по умолчанию попытается найти соответствующую страницу в пределах приложения.
<h:commandButton value="submit" action="response">
В вышеуказанном примере обработчик навигации по умолчанию попытается найти страницу response.xhtml и перейти к ней.
9.8.Основные требования приложения JavaServer Faces
Дополнительно к выбору конфигурации приложения вы должны выполнить другие требования JavaServer Faces, включая правильную упаковку всех необходимых
файлов и обеспечение дескриптора развертывания. Ниже объяснено, как выполнять
эти административные задачи.
Приложения JavaServer Faces 2.0 должны удовлетворять спецификации Servlet
(по крайней мере версии 2.5) и спецификации JavaServer Pages (по крайней мере версии 2.1). Все приложения, согласованные с этой спецификацией, упакованы в WAR- файл, который должен соответствовать специфическим требованиям выполнения на
других контейнерах. Как минимум, файл WAR для приложения JavaServer Faces должен содержать следующее:
•дескриптор развертывания веб-приложения web.xml;
•файл конфигурации ресурсов приложения;
101
•набор файлов JAR, содержащий существенные классы;
•набор классов, страниц JSF и других необходимых ресурсов, как например, файлы рисунков.
Например, файл WAR приложения JSF, использующего Facelets, обычно имеет
следующую структуру папок:
$PROJECT_DIR [Web Pages] +-/[xhtml documents] +-/resources +-/WEB-INF
+- /classes +- /lib
+- /web.xml
+- /faces-config.xml +- /sun-web.xml
Файл web.xml (или дескриптор развертывания), файлы JAR и файлы приложе-
ния должны содержаться в директории WEB-INF архива WAR.
9.9.Конфигурирование приложений
вдескрипторе развертывания
Приложение конфигурируется, используя элементы, содержащиеся в дескрип-
торе развертывания. Дескриптор развертывания для JSF-приложения должен опреде-
лить конфигурации, которые включают следующее:
•используемые сервлеты (servlet) для обработки запросов;
•карта отображений servlet для их обработки;
•путь в файл конфигурации ресурса, если он не расположен в позиции по умолчанию.
Дескриптор развертывания может также определить другие, дополнительные
конфигурации, включая:
•определение, где сохраняется состояние компонент;
•кодировку клиента;
•сжатие сохраняемых состояний клиента;
•ограничения доступа к страницам, содержащих теги JavaServer Faces;
•включение проверок XML;
•проверки заказными объектами.
9.9.1. Идентификация сервлетов при обработке жизненного цикла
Все запросы к приложению, которые ссылаются на хранимые JSF-компоненты,
должны пройти через обработку FacesServlet. Экземпляр подсистемы FacesServlet
управляет запросом, обрабатывает цикл жизни для веб-приложения и инициализи-
рует ресурсы, требуемые технологией JavaServer Faces. Прежде чем приложение JavaServer Faces может запустить первую веб-страницу, веб-контейнер должен вы-
звать экземпляр FacesServlet для того, чтобы запустить процесс жизненного цикла приложения.
Пример определения FacesServlet:
<servlet> <servlet-name>FacesServlet</servlet-name>
102
<servlet-class>javax.faces.webapp.FacesServlet</servlet-
class>
</servlet>
Чтобы гарантировать, что экземпляр FacesServlet будет вызван, нужно обе-
спечить ему карту соответствий. Соответствие для FacesServlet может быть задано
префиксом распределения, как например, /guess/*, или расширениями, как например, *.faces. Соответствие используется, чтобы идентифицировать JSP-страницу как име-
ющую содержимое JavaServer Faces. Поэтому URL первой страницы JSP-приложения
должен включать соответствие.
В случае префиксного распределения есть два пути выполнить это:
•автор страницы может включить простую страницу HTML, как например, файл index.html в приложении, который обеспечивает URL для вызова пер-
вой страницы. Этот URL должен включить путь в FacesServlet, как показано
этим тегом, который использует соответствие, определённое в приложении guessNumber:
<a href="guess/greeting.xhtml">
•пользователи приложения могут включить путь к FacesServlet в URL на первую страницу, когда они вводят его в своем окне просмотра, например: http://localhost:8080/guessNumber/guess/greeting.xhtml
Второй метод позволяет запускать приложение с требуемой первой страницей. Этот метод требует знания имени первой страницы.
При использовании первого метода пользователям нужно ввести только сле-
дующее: http://localhost:8080/guessNumber
В случае задания соответствия расширением, если запрос приходит на сервер для страницы с расширением .faces, контейнер пошлет запрос в экземпляр
FacesServlet, который ожидает, что соответствующая страница с тем же самым име-
нем существует.
При использовании NetBeans IDE, момент, когда можно задать соответствие для FacesServlet — это создание вашего проекта JavaServer Faces:
1.В NetBeans IDE выбрать File>New Project.
2.В диалоге создания проекта выбрать Web из дерева категорий.
3.Выбрать «Приложение Web» в панели проектов.
4.Щелкнуть по кнопке «Далее».
5.Заполнить информацию на экране Name and Location.
6.Щелкнуть «Далее».
7.Установить переключатель JavaServer Faces на экране Framewoks.
8.Ввести соответствие, например, *.faces, в экземпляр FacesServlet в поле
Servlet URL Mapping.
9. Щелкнуть по кнопке «Конец».
После того как ваш проект будет открыт в NetBeans IDE, вы можете изменить
соответствие в FacesServlet следующим образом:
1.Расширьте узел вашего проекта в подокне проектов.
2.Расширьте узлы «Страницы Web» и WEB-INF в узле проекта.
3.Сделайте двойной щелчок по web.xml.
103
4.После того как файл web.xml появится в редакторе, щелкните по кнопке
Servlets на верху окна редактора. Конфигурация FacesServlet появляется
в редакторе.
Если вы предпочитаете редактировать файл web.xml непосредственно, выпол-
ните следующие шаги, чтобы конфигурировать соответствие в FacesServlet.
1.Вставьте элемент servlet в дескриптор развертывания.
2.В элементе servlet вставьте элемент display-name и установите его в
FacesServlet.
3.Также в элементе servlet добавьте элемент servlet-name и установите его в
FacesServlet.
4.Добавьте третий элемент servlet-class в элемент servlet и установите его в javax.faces.webapp.FacesServlet — полное имя класса FacesServlet.
5.После элемента servlet добавьте элемент servlet-mapping.
6.В элементе servlet-mapping добавьте элемент servlet-name и установите его
вFacesServlet. Это должно соответствовать имени, заданному элементом servlet-name, описанным на шаге 3.
7.В элементе servlet-mapping добавьте элемент url-pattern и установите путь
вFacesServlet независимо от того, какое соответствие вы предпочитаете. Пользователи приложения включат этот путь в URL, когда они получают доступ к приложению. Для приложения guessNumber это путь /guess/*.
9.9.2. Спецификация пути до файла конфигурации
Приложение может иметь много файлов конфигурации. Если эти файлы не расположены в директориях по умолчанию или файлы названы не faces-config.xml, то вам
нужно определять пути в эти файлы.
Чтобы определять эти пути в NetBeans IDE, сделайте следующее:
1.Расширьте узел вашего проекта в подокне проектов.
2.Расширьте узлы «Страницы Web» и WEB-INF в узле проекта.
3.Сделайте двойной щелчок по web.xml.
4.После того как файл web.xml появится в редакторе, щелкните по закладке
General подокна редактора.
5.Расширьте узел Context Parameters.
6.Сделайте щелчок по кнопке «Добавить».
7.В диалоге Add Context Parameter:
a)введите javax.faces.CONFIG_FILES в поле ParamName;
б) введите путь в ваш файл конфигурации в поле Param Value.
в) сделайте щелчок по кнопке OK.
8. Повторите шаги с 1 по 7 для каждого файла конфигурации.
Чтобы определять непосредственно пути в файлы, редактируя дескриптор раз-
вертывания, следуйте за этими шагами:
1.Добавьте элемент context-param к дескриптору развертывания.
2.Добавьте элемент param-value в элемент context-param и введите javax. faces.CONFIG_FILES.
3.Добавьте элемент param-value в элемент context-param и задайте путь
вваш файл конфигурации. Например, для конфигурации guessNumber —
/WEB-INF/faces-config.xml.
Повторите шаги 2 и 3 для каждого файла конфигурации вашего приложения.
104
9.9.3. Спецификация места сохранения состояний
При выполнении методов, сохраняющих состояние, вы определяете в вашем дескрипторе развертывания, где нужно сохранять состояние: на машине клиента или
на сервере. Вы делаете это с помощью установки контекстного параметра в вашем
дескрипторе развертывания.
Чтобы определить, где сохраняется состояние, с использованием NetBeans IDE,
сделайте следующее:
1.Расширьте узел вашего проекта в подокне проектов.
2.Расширьте узлы «Страницы Web» и WEB-INF в узле проекта.
3.Сделайте двойной щелчок web.xml.
4.После того как файл web.xml появится в редакторе, щелкните по кнопке
General на верху подокна редактора.
5.Расширьте узел контекстных параметров.
6.Сделайте щелчок по кнопке «Добавить».
7.В диалоге Add Context Parameter :
а) введите javax.faces.STATE_SAVING_METHOD в поле ParamName;
б) введите client или server в поле Param Value;
в) сделайте щелчок по кнопке OK.
Чтобы задать место хранения состояния непосредственным редактированием дескриптора развертывания, выполните следующие шаги:
1.Добавьте элемент context-param к дескриптору развертывания.
2.Добавьте элемент param-name в элемент context-param и задайте javax.faces.STATE_SAVING_METHOD.
3.Добавьте элемент param-value к элементу context-param и задайте это зна-
чение client или server.
Если состояние сохраняется на машине клиента, то оно представляется в скры-
той области на странице. Сервер JavaServer Faces по умолчанию сохраняет состоя-
ние на машине клиента.
9.9.4. Спецификация классов, страниц и других ресурсов
Когда упаковщик приложения использует сценарий построения, он упаковывает
ресурсы следующим способом:
•Все страницы размещаются на верхнем уровне файла WAR.
•Файл faces-config.xml и web.xml упакованы в директорию WEB-INF.
•Все пакеты загружены в директорию WEB-INF/classes/ .
•Все прикладные файлы JAR упакованы в директорию WEB-INF/lib/.
• Все |
файлы ресурсов |
находятся в директории /resources кор- |
ня |
веб-приложения |
или в директории classpath приложения |
META-INF/resources/<resourceIdentifier>
При пакетировании ваших собственных приложений вы можете воспользовать-
ся NetBeans IDE или использовать сценарии построения. Вы можете модифицировать
сценарии построения, чтобы учесть вашу ситуацию.
105
