tut-install/examples/web/jsf
Java Platform, Enterprise Edition (Java EE) 8 Учебник по Java EE |
Назад | Вперёд | Содержание |
Приложение hello1
— это веб-модуль, который использует JavaServer Faces для отображения приветствия и ответа. Вы можете использовать текстовый редактор или IDE NetBeans для просмотра файлов приложения.
Исходный код этого приложения находится в каталоге tut-install/examples/web/jsf/hello1/
.
Здесь рассматриваются следующие темы:
Чтобы просмотреть веб-модуль hello1
с IDE NetBeans:
В меню «Файл» выберите «Открыть проект».
В диалоговом окне «Открыть проект» перейдите к:
tut-install/examples/web/jsf
Выберите каталог hello1
и нажмите «Открыть проект».
Разверните узел Веб-страницы и выполните двойной клик на файле index.xhtml
, чтобы просмотреть его в редакторе.
Файл index.xhtml
является страницей входа по умолчанию для приложения Facelets. В типичном приложении Facelets веб-страницы создаются в формате XHTML. В этом приложении используются простые теги разметки для отображения формы с графическим изображением, заголовком, полем и двумя командными кнопками:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="en"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:head>
<title>Facelets Hello Greeting</title>
</h:head>
<h:body>
<h:form>
<h:graphicImage url="#{resource['images:duke.waving.gif']}"
alt="Duke waving his hand"/>
<h2>Hello, my name is Duke. What's yours?</h2>
<h:inputText id="username"
title="My name is: "
value="#{hello.name}"
required="true"
requiredMessage="Error: A name is required."
maxlength="25" />
<p></p>
<h:commandButton id="submit" value="Submit" action="response">
</h:commandButton>
<h:commandButton id="reset" value="Reset" type="reset">
</h:commandButton>
</h:form>
...
</h:body>
</html>
Самым сложным элементом на странице является поле inputText
. Атрибут maxlength
указывает максимальную длину поля. Атрибут required
указывает, что поле должно быть заполнено. Атрибут requiredMessage
предоставляет сообщение об ошибке, которое будет отображаться, если поле оставить пустым. Атрибут title
предоставляет текст, который будет использоваться программами чтения с экрана для инвалидов по зрению. Наконец, атрибут value
содержит выражение, которое будет предоставлено Managed-бином Hello
.
Веб-страница подключается к Managed-бину Hello
через выражение значения языка выражений (EL) #{hello.name}
, которое извлекает значение свойства name
Managed-бина. Обратите внимание на использование hello
для ссылки на Managed-бин Hello
. Если имя не указано в аннотации @Named
Managed-бина, то к Managed-бину всегда обращаются с первой буквой имени класса в нижнем регистре.
Элемент Submit commandButton
определяет действие как response
, что означает, что при клике кнопки отображается страница response.xhtml
.
Выполните двойной клик на файле response.xhtml
, чтобы просмотреть его.
Откроется страница ответа. Устроенная даже проще страницы приветствия, страница ответа содержит графическое изображение, заголовок, который отображает выражение, предоставляемое Managed-бином, и одну кнопку, элемент action
которой возвращает вас обратно на страницу index.xhtml
:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="en"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:head>
<title>Facelets Hello Response</title>
</h:head>
<h:body>
<h:form>
<h:graphicImage url="#{resource['images:duke.waving.gif']}"
alt="Duke waving his hand"/>
<h2>Hello, #{hello.name}!</h2>
<p></p>
<h:commandButton id="back" value="Back" action="index" />
</h:form>
</h:body>
</html>
Разверните узел «Исходные пакеты», а затем узел javaeetutorial.hello1
.
Выполните двойной клик на файле Hello.java
, чтобы просмотреть его.
Класс Hello
, называемый классом Managed-бина, предоставляет get- и set- методы получения и установки свойства name
, используемого в выражениях страницы Facelets. По умолчанию язык выражений ссылается на имя класса с первой буквой в нижнем регистре (hello.name
).
package javaeetutorial.hello1;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
@Named
@RequestScoped
public class Hello {
private String name;
public Hello() {
}
public String getName() {
return name;
}
public void setName(String user_name) {
this.name = user_name;
}
}
Если вы используете имя по умолчанию для класса бина, вы можете указать аннотацию @Model
вместо @Named
и @RequestScoped
. Аннотация @Model
называется стереотипом. Это термин для аннотации, которая инкапсулирует другие аннотации. Это будет описано позже в Использование стереотипов в приложениях CDI. Некоторые примеры будут использовать @Model
там, где это уместно.
Под узлом веб-страниц разверните узел WEB-INF и выполните двойной клик на файле web.xml
, чтобы просмотреть его.
Файл web.xml
содержит несколько элементов, необходимых для приложения Facelets. Всё перечисленное ниже создаётся автоматически при использовании IDE NetBeans для создания приложения.
Контекстный параметр, определяющий этап проекта:
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
Контекстный параметр предоставляет информацию о конфигурации, необходимую для веб-приложения. Приложение может определять свои собственные контекстные параметры. Кроме того, JavaServer Faces и Java Servlet задают контекстные параметры, которые могут использоваться приложением.
Элемент servlet
и парный ему элемент servlet-mapping
определяют сервлетFacesServlet
. Он будет обрабатывать все запросы, URL которых имеет суффикс .xhtml
:
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
Элемент welcome-file-list
указывает местоположение страницы входа:
<welcome-file-list>
<welcome-file>index.xhtml</welcome-file>
</welcome-file-list>
В классе Hello.java
аннотации javax.inject.Named
и javax.enterprise.context.RequestScoped
идентифицируют класс как Managed-бин с областью видимости запроса. Области видимости определяют, как долго данные приложения остаются доступны.
Наиболее часто используемые области в приложениях JavaServer Faces:
Запроса (@RequestScoped
): область видимости запроса хранится в течение одного HTTP-запроса в веб-приложении. В приложении, подобном hello1
, где всё приложение состоит из одного запроса и ответа, бин использует область видимости запроса.
Сессии (@SessionScoped
): область видимости сессии сохраняется для нескольких HTTP-запросов в веб-приложении. Когда приложение состоит из нескольких запросов и ответов, для которых необходимо поддерживать данные, компоненты используют область видимости сессии.
Приложения (@ApplicationScoped
): область видимости приложения хранит данные в течение всего взаимодействия всех пользователей с веб-приложением.
Для получения дополнительной информации об областях видимости в JavaServer Faces см. Использование областей видимости Managed-бинов.
Веб-модуль должен быть упакован в WAR в определённых сценариях развёртывания и всегда, когда вы хотите распространять веб-модуль. Вы можете упаковать веб-модуль в WAR-файл используя Maven или выбранную вами IDE. В этом руководстве показано, как использовать IDE NetBeans и Maven для сборки, упаковки и развёртывания примера приложения hello1
.
Вы можете развернуть WAR-файл на GlassFish Server:
Использование IDE NetBeans
Использование команды asadmin
Использование Консоли администрирования
Копирование WAR-файла в каталог domain-dir/autodeploy/
В этом руководстве вы будете использовать IDE NetBeans или Maven для упаковки и развёртывания.
Чтобы собрать и упаковать веб-модуль hello1
из IDE NetBeans:
Запустите GlassFish Server, как описано в Запуск GlassFish Server с IDE NetBeans, если вы этого ещё не сделали.
В меню «Файл» выберите «Открыть проект».
В диалоговом окне «Открыть проект» перейдите к:
tut-install/examples/web/jsf
Выберите каталог hello1
.
Нажмите Открыть проект.
На вкладке «Проекты» кликните правой кнопкой мыши на проект hello1
и выберите «Сборка». Эта команда развёртывает проект на сервере.
Сборка и упаковка веб-модуля hello1
с помощью Maven:
Запустите GlassFish Server, как описано в Запуск GlassFish Server с помощью командной строки, если вы этого ещё не сделали.
В окне терминала перейдите в:
tut-install/examples/web/jsf/hello1/
Введите следующую команду:
mvn install
Эта команда выполняет компиляцию и создаёт WAR-файл в tut-install/examples/web/jsf/hello1/target/
. Затем проект развёртывается на сервере.
GlassFish Server предоставляет два способа просмотра развёрнутых веб-модулей: Консоль администрирования и команда asadmin
. Вы также можете использовать IDE NetBeans для просмотра развёрнутых модулей.
Чтобы просмотреть развёрнутые веб-модули с помощью Консоли администрирования:
Откройте URL http://localhost:4848/
в браузере.
Выберите узел Приложения.
Развёрнутые веб-модули отображаются в таблице «Развёрнутые приложения».
Введите следующую команду:
asadmin list-applications
Теперь, когда веб-модуль развёрнут, вы можете просмотреть его, открыв приложение в веб-браузере. По умолчанию приложение развёртывается на хосте localhost
на порту 8080. Корневой контекст веб-приложения — hello1
.
Чтобы запустить развёрнутый веб-модуль hello1
:
Откройте веб-браузер.
Введите следующий URL:
http://localhost:8080/hello1/
В поле введите своё имя и нажмите «Отправить».
На странице ответа отображается имя, которое вы отправили. Нажмите Назад, чтобы повторить попытку.
Если динамическая перезагрузка включена, вам не нужно повторно развёртывать приложение или модуль при изменении его кода или дескрипторов развёртывания. Всё, что вам нужно сделать, это скопировать изменённые страницы или файлы классов в каталог развёртывания приложения или модуля. Каталог развёртывания веб-модуля имеет имя context-root: domain-dir/Applications/context-root
. Сервер периодически проверяет изменения, автоматически и динамически развёртывает приложение с изменениями.
Эта возможность полезна в среде разработки, поскольку позволяет быстро тестировать изменения кода. Однако динамическая перезагрузка не рекомендуется для производственной среды, поскольку она может снизить производительность. Кроме того, всякий раз при перезагрузке сессии становятся недействительными, и клиент должен перезапустить сессию.
В GlassFish Server динамическая перезагрузка включена по умолчанию.
Вы можете удалить веб-модули и другие типы корпоративных приложений с IDE NetBeans или Maven.
Чтобы удалить веб-модуль hello1
из IDE NetBeans:
На вкладке «Сервисы» разверните узел «Серверы» и затем разверните узел «GlassFish Server».
Разверните узел Приложения.
Кликните правой кнопкой мыши модуль hello1
и выберите «Удалить».
Чтобы удалить файлы классов и другие артефакты сборки, вернитесь на вкладку «Проекты», кликните проект правой кнопкой мыши и выберите «Очистить».
Чтобы удалить веб-модуль hello1
с помощью Maven:
В окне терминала перейдите в:
tut-install/examples/web/jsf/hello1/
Введите следующую команду:
mvn cargo:undeploy
Чтобы удалить файлы классов и другие артефакты сборки, введите следующую команду:
mvn clean
Назад | Вперёд | Содержание |