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

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

Веб-модуль с использованием JavaServer Faces: пример hello1

Приложение hello1 — это веб-модуль, который использует JavaServer Faces для отображения приветствия и ответа. Вы можете использовать текстовый редактор или IDE NetBeans для просмотра файлов приложения.

Исходный код этого приложения находится в каталоге tut-install/examples/web/jsf/hello1/.

Здесь рассматриваются следующие темы:

Просмотр веб-модуля hello1 в IDE NetBeans

Чтобы просмотреть веб-модуль hello1 с IDE NetBeans:

  1. В меню «Файл» выберите «Открыть проект».

  2. В диалоговом окне «Открыть проект» перейдите к:

    tut-install/examples/web/jsf
  3. Выберите каталог hello1 и нажмите «Открыть проект».

  4. Разверните узел Веб-страницы и выполните двойной клик на файле 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.

  5. Выполните двойной клик на файле 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>
  6. Разверните узел «Исходные пакеты», а затем узел javaeetutorial.hello1.

  7. Выполните двойной клик на файле 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 там, где это уместно.

  8. Под узлом веб-страниц разверните узел 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-бинов.

Упаковка и развёртывание веб-модуля hello1

Веб-модуль должен быть упакован в WAR в определённых сценариях развёртывания и всегда, когда вы хотите распространять веб-модуль. Вы можете упаковать веб-модуль в WAR-файл используя Maven или выбранную вами IDE. В этом руководстве показано, как использовать IDE NetBeans и Maven для сборки, упаковки и развёртывания примера приложения hello1.

Вы можете развернуть WAR-файл на GlassFish Server:

  • Использование IDE NetBeans

  • Использование команды asadmin

  • Использование Консоли администрирования

  • Копирование WAR-файла в каталог domain-dir/autodeploy/

В этом руководстве вы будете использовать IDE NetBeans или Maven для упаковки и развёртывания.

Сборка и упаковка веб-модуля hello1 из IDE NetBeans

Чтобы собрать и упаковать веб-модуль hello1 из IDE NetBeans:

  1. Запустите GlassFish Server, как описано в Запуск GlassFish Server с IDE NetBeans, если вы этого ещё не сделали.

  2. В меню «Файл» выберите «Открыть проект».

  3. В диалоговом окне «Открыть проект» перейдите к:

    tut-install/examples/web/jsf
  4. Выберите каталог hello1.

  5. Нажмите Открыть проект.

  6. На вкладке «Проекты» кликните правой кнопкой мыши на проект hello1 и выберите «Сборка». Эта команда развёртывает проект на сервере.

Сборка и упаковка веб-модуля hello1 с Maven

Сборка и упаковка веб-модуля hello1 с помощью Maven:

  1. Запустите GlassFish Server, как описано в Запуск GlassFish Server с помощью командной строки, если вы этого ещё не сделали.

  2. В окне терминала перейдите в:

    tut-install/examples/web/jsf/hello1/
  3. Введите следующую команду:

    mvn install

    Эта команда выполняет компиляцию и создаёт WAR-файл в tut-install/examples/web/jsf/hello1/target/. Затем проект развёртывается на сервере.

Просмотр развёрнутых веб-модулей

GlassFish Server предоставляет два способа просмотра развёрнутых веб-модулей: Консоль администрирования и команда asadmin. Вы также можете использовать IDE NetBeans для просмотра развёрнутых модулей.

Просмотр развёрнутых веб-модулей в Консоли администрирования

Чтобы просмотреть развёрнутые веб-модули с помощью Консоли администрирования:

  1. Откройте URL http://localhost:4848/ в браузере.

  2. Выберите узел Приложения.

    Развёрнутые веб-модули отображаются в таблице «Развёрнутые приложения».

Просмотр развёрнутых веб-модулей с командой asadmin

Введите следующую команду:

asadmin list-applications

Просмотр развёрнутых веб-модулей в IDE NetBeans

Чтобы просмотреть развёрнутые веб-модули в IDE NetBeans:

  1. На вкладке «Сервисы» разверните узел «Серверы» и затем разверните узел «GlassFish Server».

  2. Разверните узел Приложения, чтобы просмотреть развёрнутые модули.

Запуск развёрнутого веб-модуля hello1

Теперь, когда веб-модуль развёрнут, вы можете просмотреть его, открыв приложение в веб-браузере. По умолчанию приложение развёртывается на хосте localhost на порту 8080. Корневой контекст веб-приложения — hello1.

Чтобы запустить развёрнутый веб-модуль hello1:

  1. Откройте веб-браузер.

  2. Введите следующий URL:

    http://localhost:8080/hello1/
  3. В поле введите своё имя и нажмите «Отправить».

    На странице ответа отображается имя, которое вы отправили. Нажмите Назад, чтобы повторить попытку.

Динамическая перезагрузка развёрнутых модулей

Если динамическая перезагрузка включена, вам не нужно повторно развёртывать приложение или модуль при изменении его кода или дескрипторов развёртывания. Всё, что вам нужно сделать, это скопировать изменённые страницы или файлы классов в каталог развёртывания приложения или модуля. Каталог развёртывания веб-модуля имеет имя context-root: domain-dir/Applications/context-root. Сервер периодически проверяет изменения, автоматически и динамически развёртывает приложение с изменениями.

Эта возможность полезна в среде разработки, поскольку позволяет быстро тестировать изменения кода. Однако динамическая перезагрузка не рекомендуется для производственной среды, поскольку она может снизить производительность. Кроме того, всякий раз при перезагрузке сессии становятся недействительными, и клиент должен перезапустить сессию.

В GlassFish Server динамическая перезагрузка включена по умолчанию.

Удаление веб-модуля hello1

Вы можете удалить веб-модули и другие типы корпоративных приложений с IDE NetBeans или Maven.

Удаление веб-модуля hello1 из IDE NetBeans

Чтобы удалить веб-модуль hello1 из IDE NetBeans:

  1. На вкладке «Сервисы» разверните узел «Серверы» и затем разверните узел «GlassFish Server».

  2. Разверните узел Приложения.

  3. Кликните правой кнопкой мыши модуль hello1 и выберите «Удалить».

  4. Чтобы удалить файлы классов и другие артефакты сборки, вернитесь на вкладку «Проекты», кликните проект правой кнопкой мыши и выберите «Очистить».

Удаление веб-модуля hello1 с помощью Maven

Чтобы удалить веб-модуль hello1 с помощью Maven:

  1. В окне терминала перейдите в:

    tut-install/examples/web/jsf/hello1/
  2. Введите следующую команду:

    mvn cargo:undeploy
  3. Чтобы удалить файлы классов и другие артефакты сборки, введите следующую команду:

    mvn clean

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