Java Platform, Enterprise Edition (Java EE) 8
Учебник по Java EE

Назад Вперёд Содержание

Основные требования к приложениям JavaServer Faces

В дополнение к настройке приложения вы должны удовлетворить другие требования к приложениям 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, выполните следующие действия.

  1. Разверните узел вашего проекта на вкладке Проекты.

  2. Разверните веб-страницы и узлы WEB-INF, которые находятся под узлом проекта.

  3. Выполните двойной клик на web.xml.

  4. После того, как файл web.xml появится в редакторе, нажмите Общие в верхней части окна редактора.

  5. Разверните узел Контекстные параметры.

  6. Нажмите Добавить.

  7. В диалоговом окне «Добавить контекстный параметр»:

  8. Введите javax.faces.CONFIG_FILES в поле Имя параметра.

  9. Введите путь к файлу конфигурации в поле «Значение параметра».

  10. Нажмите ОК.

  11. Повторите шаги с 1 по 7 для каждого файла конфигурации.

Указание хранилища состояний

Для всех компонентов в веб-приложении вы можете указать в дескрипторе развёртывания, где вы хотите сохранить состояние: на клиенте или на сервере. Вы делаете это, устанавливая контекстный параметр в вашем дескрипторе развёртывания. По умолчанию состояние сохраняется на сервере, поэтому этот контекстный параметр необходимо указывать только в том случае, если вы хотите сохранить состояние на клиенте. Смотрите Сохранение и восстановление состояния для получения информации о преимуществах и недостатках каждого местоположения.

Чтобы указать место сохранения состояния в IDE NetBeans, выполните следующие действия.

  1. Разверните узел вашего проекта на вкладке Проекты.

  2. Разверните веб-страницы и узлы WEB-INF под узлом проекта.

  3. Выполните двойной клик на web.xml.

  4. После того, как файл web.xml появится в окне редактора, нажмите «Общие» в верхней части окна редактора.

  5. Разверните узел Контекстные параметры.

  6. Нажмите Добавить.

  7. В диалоговом окне «Добавить контекстный параметр»:

  8. Введите javax.faces.STATE_SAVING_METHOD в поле Имя параметра.

  9. Введите client или server в поле значения параметра.

  10. Нажмите ОК.

Если состояние сохраняется на клиенте, состояние всего представления отображается в скрытом поле на странице. 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-файлы, используя структуру каталогов, описанную в этом разделе, поскольку этот метод соответствует общепринятой практике для упаковки веб-приложений.


Назад Вперёд Содержание
Логотип Oracle  Copyright © 2017, Oracle и/или её дочерних компаний. Все права защищены. Версия перевода 1.0.5 (Java EE Tutorial — русскоязычная версия)