В дополнение к настройке приложения вы должны удовлетворить другие требования к приложениям JavaServer Faces, включая правильную упаковку всех необходимых файлов и предоставление дескриптора развёртывания. В этом разделе описывается, как выполнять эти административные задачи.
Приложения JavaServer Faces могут быть упакованы в WAR-файл, который должен соответствовать определённым требованиям для выполнения в разных контейнерах. Как минимум, WAR-файл для приложения JavaServer Faces должен содержать следующее:
-
Дескриптор развёртывания веб-приложения, который называется web.xml
, для настройки ресурсов, необходимых веб-приложению (обязательно)
-
Определённый набор JAR-файлов, содержащих необходимые классы (необязательно)
-
Набор классов приложений, страниц JavaServer Faces и других необходимых ресурсов, таких как файлы изображений
WAR-файл также может содержать:
-
Файл конфигурации приложения, который настраивает ресурсы приложения
-
Набор файлов дескрипторов библиотеки тегов
Например, WAR-файл веб-приложения Java Server Faces, использующий Facelets, обычно имеет следующую структуру каталогов:
$PROJECT_DIR
[Web Pages]
+- /[xhtml or html documents]
+- /resources
+- /WEB-INF
+- /web.xml
+- /beans.xml (optional)
+- /classes (optional)
+- /lib (optional)
+- /faces-config.xml (optional)
+- /*.taglib.xml (optional)
+- /glassfish-web.xml (optional)
Файл web.xml
(дескриптор развёртывания), набор JAR-файлов и набор файлов приложений должны содержаться в каталоге WEB-INF
WAR-файла.
Настройка веб-приложения с помощью дескриптора развёртывания
Веб-приложения обычно настраиваются с использованием элементов, содержащихся в дескрипторе развёртывания веб-приложения web.xml
. Дескриптор развёртывания для приложения JavaServer Faces должен указывать определённые конфигурации, включая следующие:
-
Сервлет, используемый для обработки запросов JavaServer Faces
-
Отображение сервлета для обработки сервлета
-
Путь к файлу конфигурации, если он существует и не находится в расположении по умолчанию
Дескриптор развёртывания может также включать в себя другие, необязательные конфигурации, которые
-
Указывают, где сохраняется состояние компонента
-
Шифруют состояние в случае сохранения его на клиенте
-
Сжимают состояние в случае сохранения его на клиенте
-
Ограничивают доступ к страницам, содержащим теги JavaServer Faces
-
Включают валидацию XML
-
Указывают этап проекта
-
Верифицируют кастомные объекты
Этот раздел даёт более подробную информацию об этих настройках. Там, где это уместно, также описывается, как можно выполнить эти настройки в IDE NetBeans.
Идентификация сервлета для обработки жизненного цикла
Требование приложения JavaServer Faces состоит в том, чтобы все запросы к приложению, которые ссылаются на ранее сохранённые компоненты JavaServer Faces, должны проходить через javax.faces.webapp.FacesServlet
. Объект FacesServlet
управляет жизненным циклом обработки запросов для веб-приложений и инициализирует ресурсы, необходимые для JavaServer Faces.
Прежде чем приложение JavaServer Faces запустит свою первую веб-страницу, веб-контейнер должен вызвать объект FacesServlet
для старта процесса жизненного цикла приложения. См. Жизненный цикл приложения JavaServer Faces для получения дополнительной информации.
В следующем примере показана конфигурация по умолчанию для FacesServlet
:
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
Нужно соответствующим образом оформить файл конфигурации, чтобы быть уверенными в вызове объекта FacesServlet
. Назначение FacesServlet
-у может происходить по префиксу, например /faces/
, или по расширению, например .xhtml
. Сопоставление используется для определения страницы с содержимым JavaServer Faces. По этой причине URL первой страницы приложения должен подходить под назначение шаблона URL.
Следующие элементы определяют назначение по префиксу:
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
...
<welcome-file-list>
<welcome-file>faces/greeting.xhtml</welcome-file>
</welcome-file-list>
Следующие элементы, используемые в примерах учебника, определяют назначение по расширению:
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
...
<welcome-file-list>
<welcome-file>index.xhtml</welcome-file>
</welcome-file-list>
При использовании этого механизма пользователи получают доступ к приложению, как показано в следующем примере:
http://localhost:8080/guessNumber
В случае назначения по расширению, если на сервер поступает запрос на страницу с расширением .xhtml
, контейнер отправит запрос объекту FacesServlet
, ожидающему, что соответствующая страница с тем же именем существует.
Чтобы свести к минимуму беспорядок и разрешить простые URL-ы, вы можете создать URL-ы без расширений, вручную назначив FacesServlet
существующим префиксам и суффиксам в web.xml
.
Если вы используете IDE NetBeans, дескриптор развёртывания с конфигурациями по умолчанию создаётся автоматически. Если вы создали своё приложение без IDE, вы можете создать дескриптор развёртывания вручную.
Указание пути к файлу конфигурации приложения
Как объясняется в Файле конфигурации приложения, приложение может иметь несколько файлов конфигурации приложения. Если эти файлы находятся не в каталогах, в которых реализация ищет их по умолчанию, или файлы называются не faces-config.xml
, необходимо указать пути к этим файлам.
Чтобы указать эти пути в IDE NetBeans, выполните следующие действия.
-
Разверните узел вашего проекта на вкладке Проекты.
-
Разверните веб-страницы и узлы WEB-INF, которые находятся под узлом проекта.
-
Выполните двойной клик на web.xml
.
-
После того, как файл web.xml
появится в редакторе, нажмите Общие в верхней части окна редактора.
-
Разверните узел Контекстные параметры.
-
Нажмите Добавить.
-
В диалоговом окне «Добавить контекстный параметр»:
-
Введите javax.faces.CONFIG_FILES
в поле Имя параметра.
-
Введите путь к файлу конфигурации в поле «Значение параметра».
-
Нажмите ОК.
-
Повторите шаги с 1 по 7 для каждого файла конфигурации.
Указание хранилища состояний
Для всех компонентов в веб-приложении вы можете указать в дескрипторе развёртывания, где вы хотите сохранить состояние: на клиенте или на сервере. Вы делаете это, устанавливая контекстный параметр в вашем дескрипторе развёртывания. По умолчанию состояние сохраняется на сервере, поэтому этот контекстный параметр необходимо указывать только в том случае, если вы хотите сохранить состояние на клиенте. Смотрите Сохранение и восстановление состояния для получения информации о преимуществах и недостатках каждого местоположения.
Чтобы указать место сохранения состояния в IDE NetBeans, выполните следующие действия.
-
Разверните узел вашего проекта на вкладке Проекты.
-
Разверните веб-страницы и узлы WEB-INF под узлом проекта.
-
Выполните двойной клик на web.xml
.
-
После того, как файл web.xml
появится в окне редактора, нажмите «Общие» в верхней части окна редактора.
-
Разверните узел Контекстные параметры.
-
Нажмите Добавить.
-
В диалоговом окне «Добавить контекстный параметр»:
-
Введите javax.faces.STATE_SAVING_METHOD
в поле Имя параметра.
-
Введите client
или server
в поле значения параметра.
-
Нажмите ОК.
Если состояние сохраняется на клиенте, состояние всего представления отображается в скрытом поле на странице. JavaServer Faces по умолчанию сохраняет состояние на сервере. Duke's Forest сохраняет своё состояние на клиенте.
Настройка этапа проекта
Этап проекта — это контекстный параметр, определяющий состояние приложения JavaServer Faces в жизненном цикле программного обеспечения. Этап приложения может повлиять на поведение приложения. Например, сообщения об ошибках могут отображаться при разработке но подавляться при боевом использовании.
Возможные значения стадии проекта:
-
Development
-
UnitTest
-
SystemTest
-
Production
Этап проекта настраивается с помощью контекстного параметра в файле дескриптора развёртывания. Вот пример:
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
Если этап проекта не определён, по умолчанию берётся Production
. Вы также можете добавить кастомные этапы в соответствии с вашими требованиями.
Включение классов, страниц и других ресурсов
При упаковке веб-приложений с использованием включённых сценариев сборки вы заметите, что сценарии упаковывают ресурсы следующими способами.
-
Все веб-страницы находятся на верхнем уровне файла WAR.
-
Файл faces-config.xml
и файл web.xml
упакованы в каталог WEB-INF
.
-
Все пакеты хранятся в каталоге WEB-INF/classes/
.
-
Все файлы JAR приложения упакованы в каталог WEB-INF/lib/
.
-
Все файлы ресурсов находятся либо в корне каталога /resources
веб-приложения, либо в classpath веб-приложения, в каталоге `META-INF/resources/`resourceIdentifier. Для получения дополнительной информации о ресурсах см. Веб-ресурсы.
При упаковке приложений может использоваться среда IDE NetBeans или файлы XML, например, созданные для Maven. Вы можете изменить файлы XML в соответствии с вашей ситуацией. Однако вы можете продолжать упаковывать WAR-файлы, используя структуру каталогов, описанную в этом разделе, поскольку этот метод соответствует общепринятой практике для упаковки веб-приложений.