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

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

Жизненный цикл сервлета

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

  1. Если объект сервлета не существует, веб-контейнер:

  2. Загружает класс сервлета

  3. Инстанцирует объект сервлета

  4. Инициализирует объект сервлета, вызывая метод init (инициализация описана в Создание и инициализация сервлета)

  5. Контейнер вызывает метод service, передавая объекты запроса и ответа. Сервисные методы обсуждаются в Написание сервисных методов.

Если контейнер посчитает необходимым удалить сервлет, он завершает сервлет, вызывая метод destroy сервлета. Для получения дополнительной информации см. Финализация сервлета.

Обработка событий жизненного цикла сервлета

Вы можете отслеживать события в жизненном цикле сервлета и реагировать на них, определяя объекты слушателей, чьи методы вызываются при возникновении событий жизненного цикла. Чтобы использовать эти объекты слушателя, вы должны определить и указать класс слушателя.

Определение класса слушателя

Вы определяете класс слушателя как реализацию интерфейса слушателя. Таблица 18-1 перечисляет события, которые можно отслеживать, и соответствующий интерфейс, который должен быть реализован. Когда вызывается метод слушателя, ему передаётся событие, которое содержит информацию, соответствующую этому событию. Например, методы в интерфейсе HttpSessionListener передаются в HttpSessionEvent, который содержит HttpSession.

Таблица 18-1 События жизненного цикла сервлета

Object

Событие

Интерфейс слушателя и класс события

Веб-контекст

Инициализация и уничтожение

javax.servlet.ServletContextListener и ServletContextEvent

Веб-контекст

Атрибут добавлен, удалён или заменён

javax.servlet.ServletContextAttributeListener и ServletContextAttributeEvent

Сессия

Создание, аннулирование, активация, деактивация и тайм-аут

javax.servlet.http.HttpSessionListener, javax.servlet.http.HttpSessionActivationListener и HttpSessionEvent

Сессия

Атрибут добавлен, удалён или заменён

javax.servlet.http.HttpSessionAttributeListener и HttpSessionBindingEvent

Запрос

Запрос сервлета начал обрабатываться веб-компонентами

javax.servlet.ServletRequestListener и ServletRequestEvent

Запрос

Атрибут добавлен, удалён или заменён

javax.servlet.ServletRequestAttributeListener и ServletRequestAttributeEvent

Используйте аннотацию @WebListener чтобы определить слушателя для получения событий для различных операций в определённом контексте веб-приложения. Классы, аннотированные с помощью @WebListener, должны реализовывать один из следующих интерфейсов:

javax.servlet.ServletContextListener
javax.servlet.ServletContextAttributeListener
javax.servlet.ServletRequestListener
javax.servlet.ServletRequestAttributeListener
javax.servlet.http.HttpSessionListener
javax.servlet.http.HttpSessionAttributeListener

Например, следующий фрагмент кода определяет слушателя, который реализует два из этих интерфейсов:

import javax.servlet.ServletContextAttributeListener;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

@WebListener()
public class SimpleServletListener implements ServletContextListener,
        ServletContextAttributeListener {
    ...

Обработка ошибок сервлета

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

A Servlet Exception Has Occurred

Но можно также указать, что контейнер должен возвращать определённую страницу ошибки для данного исключения.


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