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

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

Настройка веб-приложений

В этом разделе описываются следующие задачи, связанные с настройкой веб-приложений:

  • Установка контекстных параметров

  • Объявление файлов входа

  • Назначение ошибок экранам ошибок

  • Объявление ссылок на ресурсы

Установка контекстных параметров

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

Добавление контекстного параметра с IDE NetBeans

Эти шаги применяются ко всем веб-приложениям вообще, а не только конкретно к примерам этой главы.

Чтобы добавить контекстный параметр с IDE NetBeans:

  1. Откройте проект.

  2. Разверните узел проекта в дереве проектов.

  3. Разверните узел Веб-страницы, а затем узел WEB-INF.

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

    Если в проекте нет файла web.xml, создайте его, выполнив шаги из Создание файла web.xml в IDE NetBeans.

  5. Нажмите Общие в верхней части окна редактора.

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

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

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

  9. В поле «Значение параметра» введите параметр для передачи в объект контекста.

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

Создание файла web.xml в IDE NetBeans

Чтобы создать файл web.xml с IDE NetBeans:

  1. В меню «Файл» выберите «Новый файл».

  2. В мастере создания файлов выберите категорию «Интернет», затем выберите «Стандартный дескриптор развёртывания» в разделе «Типы файлов».

  3. Нажмите кнопку Далее.

  4. Нажмите Готово.

    Файл web.xml появится в web/WEB-INF/.

Декларирование файлов входа

Механизм файлов входа позволяет указать список файлов, которые веб-контейнер может добавить к запросу на URL (называемый допустимым частичным запросом), которому не назначен ни один веб-компонент. Для примера предположим, что вы определяете файл входа welcome.html. Когда клиент запрашивает URL, такой как host:port/webapp/directory, где directory не назначен сервлету или странице XHTML, клиенту в ответ будет возвращён файл host:port/webapp/directory/`welcome.html.

Если веб-контейнер получает валидный частичный запрос, он проверяет список файлов входа, добавляет к частичному запросу каждый файл приветствия в указанном порядке и проверяет, назначен ли статический ресурс или сервлет в WAR URL, указанному в запросе. Затем веб-контейнер отправляет запрос первому ресурсу, который есть в WAR.

Если файл входа не указан, GlassFish Server будет использовать файл index.html в качестве файла входа по умолчанию. Если файлов входа и файла index.html нет, GlassFish Server возвращает список каталогов.

Вы можете указать файлы входа в файле web.xml. Спецификация файла входа для примера hello1 выглядит следующим образом:

<welcome-file-list>
    <welcome-file>index.xhtml</welcome-file>
</welcome-file-list>

Файл входа нужно указывать без начальной и конечной косой черты (/).

В примере hello2 не указан файл входа, поскольку запрос URL назначен веб-компоненту GreetingServlet через шаблон URL-адреса /greeting.

Назначение ошибок экранам ошибок

Если во время выполнения веб-приложения возникает ошибка, вы можете настроить приложение на отображение экрана конкретной ошибки в зависимости от её типа. А именно, можно указать соответствие между кодом состояния, возвращаемым в ответе HTTP, или исключением Java, выбрасываемым любым веб-компонентом, и экраном ошибок любого типа.

В дескрипторе развёртывания может быть указано несколько элементов error-page. Каждый элемент идентифицирует отдельную ошибку, которая приводит к открытию страницы ошибки. Эта страница ошибки может быть одинаковой для любого количества элементов error-page.

Настройка назначения ошибок экранам ошибок в IDE NetBeans

Эти шаги применяются ко всем веб-приложениям вообще, а не только конкретно к примерам этой главы.

Чтобы настроить отображение ошибок с IDE NetBeans:

  1. Откройте проект.

  2. Разверните узел проекта на вкладке «Проекты».

  3. Разверните узел Веб-страницы, а затем узел WEB-INF.

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

    Если в проекте нет файла web.xml, создайте его, выполнив шаги из Создание файла web.xml в IDE NetBeans.

  5. Нажмите Страницы в верхней части окна редактора.

  6. Разверните узел Страницы ошибок.

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

  8. В диалоговом окне «Добавить страницу ошибки» нажмите «Обзор» и найдите страницу, которую вы хотите использовать как страницу ошибки.

  9. Укажите либо код ошибки, либо тип исключения.

    • Чтобы указать код ошибки, в поле «Код ошибки» введите код статуса HTTP, который приведёт к открытию страницы ошибки, или оставьте поле пустым, чтобы включить все коды ошибок.

    • Чтобы указать тип исключения, в поле «Тип исключения» введите исключение, которое приведёт к загрузке страницы ошибки. Чтобы указать все генерируемые ошибки и исключения, введите java.lang.Throwable.

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

Декларирование ссылок на ресурсы

Если ваш веб-компонент использует такие объекты, как Enterprise-бины, источники данных или веб-сервисы, вы можете использовать аннотации Java EE для инъецирования этих ресурсов в ваше приложение. Аннотации позволяют избавиться от большого количества стандартного кода поиска и элементов конфигурации, которые требовались в предыдущих версиях Java EE.

Хотя инъецирование ресурсов с использованием аннотаций может быть более удобным для разработчика, существуют некоторые ограничения на его использование в веб-приложениях. Во-первых, вы можете инъецировать ресурсы только в объекты, управляемые контейнером, так как контейнер должен иметь контроль над созданием компонента, чтобы выполнить инъецирование в него. В результате вы не можете инъецировать ресурсы в такие объекты, как простые JavaBeans. Однако Managed-бины управляются контейнером и, следовательно, для них применимо инъецирование ресурсов.

Компоненты, для которых применимо инъецирование ресурсов, перечислены в таблице 6-1.

В этом разделе объясняется, как использовать несколько поддерживаемых веб-контейнером аннотаций для инъецирования ресурсов. Глава 41 «Выполнение примеров персистентности» объясняет, как веб-приложения могут использовать аннотации, поддерживаемые Java Persistence API. Глава 51 «Начало работы по защите веб-приложений» объясняет, как использовать аннотации для указания информации о безопасности веб-приложений. Смотрите главу 55 «Адаптеры и контракты ресурсов» для получения дополнительной информации о ресурсах.

Таблица 6-1. Веб-компоненты, для которых применимо инъецирование ресурсов

Компонент

Интерфейс/Класс

Сервлеты

javax.servlet.Servlet

Фильтры сервлетов

javax.servlet.ServletFilter

Слушатели событий

javax.servlet.ServletContextListener

javax.servlet.ServletContextAttributeListener

javax.servlet.ServletRequestListener

javax.servlet.ServletRequestAttributeListener

javax.servlet.http.HttpSessionListener

javax.servlet.http.HttpSessionAttributeListener

javax.servlet.http.HttpSessionBindingListener

Managed-бины

Простые объекты Java

Декларирование ссылки на ресурс

Аннотация @Resource используется для объявления ссылки на ресурс, такой как источник данных, Enterprise-бин или другой объект среды выполнения.

Аннотация @Resource применяется для класса, метода или поля. Контейнер отвечает за инъецирование ссылок на ресурсы, объявленные аннотацией @Resource, и сопоставление их с соответствующими ресурсами JNDI.

В следующем примере аннотация @Resource используется для инъецирования источника данных в компонент, которому необходимо установить соединение с источником данных, как это делается при использовании технологии JDBC для доступа к реляционной базе данных:

@Resource javax.sql.DataSource catalogDS;
public getProductsByCategory() {
    // получение соединения и выполнение запроса
    Connection conn = catalogDS.getConnection();
    ...
}

Контейнер инъецирует этот источник данных до того, как компонент станет доступен для приложения. JNDI находит источник данных по его имени поля catalogDS и его типу javax.sql.DataSource.

Если у вас есть несколько ресурсов, которые нужно инъецировать в один компонент, используйте аннотацию @Resources, чтобы содержать их, как показано в следующем примере:

@Resources ({
    @Resource(name="myDB" type=javax.sql.DataSource.class),
    @Resource(name="myMQ" type=javax.jms.ConnectionFactory.class)
})

В примерах веб-приложений этого учебника для доступа к реляционным базам данных используется API персистентности Java. Этот API не требует явного создания соединения с источником данных. Поэтому в примерах не используется аннотация @Resource для инъецирования источника данных. Однако этот API поддерживает аннотации @PersistenceUnit и @PersistenceContext для инъецирования EntityManagerFactory и EntityManager соответственно. Глава 41 «Выполнение примеров персистентности» описывает эти аннотации и использование API Java Persistence в веб-приложениях.

Декларирование ссылки на веб-сервис

Аннотация @WebServiceRef предоставляет ссылку на веб-сервис. В следующем примере показано использование аннотации @WebServiceRef для объявления ссылки на веб-сервис. WebServiceRef использует элемент wsdlLocation для указания URI файла WSDL развёрнутого сервиса:

...
import javax.xml.ws.WebServiceRef;
...
public class ResponseServlet extends HTTPServlet {
@WebServiceRef(wsdlLocation="http://localhost:8080/helloservice/hello?wsdl")
static HelloService service;

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