Рубрики
Без рубрики

Пример прослушивателя сервлета ServletContextListener

ServletContextListener. Пример прослушивателя сервлета. ServletContextAttributeListener, HttpSessionListener, Примеры ServletRequestListener, Загрузите проект.

Автор оригинала: Pankaj Kumar.

ServletContextListener-один из многих прослушивателей сервлетов, которые у нас есть. Это пятая статья из серии Java Web Application , возможно, вы захотите ознакомиться и с предыдущими четырьмя статьями.

  1. Веб-приложение Java
  2. Сервлеты на Java
  3. Управление сеансами Сервлетов
  4. Фильтр Сервлетов

Прослушиватель Сервлетов

В этом уроке мы рассмотрим прослушиватель сервлетов , преимущества прослушивателей сервлетов , некоторые общие задачи, которые мы можем выполнять с помощью прослушивателей, интерфейсов прослушивателей API сервлетов и объектов событий. В конце мы создадим простой веб-проект, чтобы показать пример часто используемой реализации прослушивателя для ServletContext , Сеанса и ServletRequest .

  1. Почему у нас есть прослушиватель сервлетов?
  2. Интерфейсы прослушивателя Сервлетов и объекты событий
  3. Конфигурация прослушивателя Сервлетов
  4. Пример прослушивателя Сервлетов
  5. ServletContextListener
  6. ServletContextAttributeListener
  7. HttpSessionListener
  8. ServletRequestListener
  1. Почему у нас есть прослушиватель сервлетов?

  2. Мы знаем , что с помощью ServletContext мы можем создать атрибут с областью приложения, к которому могут получить доступ все другие сервлеты, но мы можем инициализировать Параметры инициализации ServletContext только как строку в дескрипторе развертывания (web.xml). Что делать, если наше приложение ориентировано на базу данных, и мы хотим установить атрибут в ServletContext для подключения к базе данных. Если у вашего приложения есть одна точка входа (логин пользователя), вы можете сделать это в первом запросе сервлета, но если у нас несколько точек входа, то выполнение этого везде приведет к значительной избыточности кода. Кроме того, если база данных не работает или не настроена должным образом, мы не узнаем об этом, пока на сервер не поступит первый запрос клиента. Для обработки этих сценариев API сервлетов предоставляет интерфейсы прослушивателей, которые мы можем реализовать и настроить для прослушивания события и выполнения определенных операций.

    Событие – это возникновение чего-либо, в мире веб-приложений событием может быть инициализация приложения, уничтожение приложения, запрос от клиента, создание/уничтожение сеанса, изменение атрибута в сеансе и т.д.

    API сервлета предоставляет различные типы интерфейсов прослушивателя, которые мы можем реализовать и настроить в web.xml чтобы обработать что-то, когда происходит определенное событие. Например, в приведенном выше сценарии мы можем создать Прослушиватель для события запуска приложения, чтобы прочитать параметры инициализации контекста, создать соединение с базой данных и установить для него атрибут контекста для использования другими ресурсами.

  3. Интерфейсы прослушивателя Сервлетов и объекты событий

  4. API сервлета предоставляет различные типы прослушивателей для различных типов событий. Интерфейсы прослушивателя объявляют методы для работы с группой аналогичных событий, например, у нас есть прослушиватель ServletContext для прослушивания событий запуска и выключения контекста. Каждый метод в интерфейсе прослушивателя принимает объект события в качестве входных данных. Объект события работает как оболочка для предоставления слушателям определенного объекта.

    API сервлета предоставляет следующие объекты событий.

    1. javax.сервлет.AsyncEvent – Событие, которое запускается, когда асинхронная операция, инициированная на ServletRequest (посредством вызова ServletRequest#startAsync или ServletRequest#startAsync(ServletRequest, ServletResponse)), завершена, истекло время ожидания или произошла ошибка.
    2. javax.сервлет.http.HttpSessionBindingEvent – События этого типа либо отправляются объекту, реализующему HttpSessionBindingListener, когда он привязан или освобожден из сеанса, либо в HttpSessionAttributeListener, настроенный в web.xml когда какой-либо атрибут привязан, развязан или заменен в сеансе. Сеанс связывает объект с помощью вызова HttpSession.setAttribute и развязывает объект с помощью вызова HttpSession.removeAttribute. Мы можем использовать это событие для действий по очистке, когда объект удаляется из сеанса.
    3. javax.сервлет.http.HttpSessionEvent – Это класс, представляющий уведомления о событиях для изменений сеансов в веб-приложении.
    4. javax.сервлет.ServletContextAttributeEvent – класс событий для уведомлений об изменениях атрибутов ServletContext веб-приложения.
    5. javax.сервлет.ServletContextEvent – Это класс событий для уведомлений об изменениях контекста сервлета веб-приложения.
    6. javax.сервлет.ServletRequestEvent – События такого рода указывают на события жизненного цикла для ServletRequest. Источником события является ServletContext этого веб – приложения.
    7. javax.сервлет.ServletRequestAttributeEvent – Это класс событий для уведомлений об изменениях атрибутов запроса сервлета в приложении.

    API сервлета предоставляет следующие интерфейсы прослушивателя.

    1. javax.сервлет.AsyncListener – Прослушиватель, который будет уведомлен в случае, если асинхронная операция, инициированная на запросе сервлета, к которому был добавлен прослушиватель, завершена, истекло время ожидания или привела к ошибке.
    2. javax.сервлет.ServletContextListener – Интерфейс для получения уведомлений об изменениях жизненного цикла ServletContext.
    3. javax.сервлет.ServletContextAttributeListener – Интерфейс для получения событий уведомления об изменении атрибута ServletContext.
    4. javax.сервлет.ServletRequestListener – Интерфейс для получения событий уведомлений о запросах, входящих и выходящих из области действия веб-приложения.
    5. javax.сервлет.ServletRequestAttributeListener – Интерфейс для получения событий уведомления об изменении атрибута ServletRequest.
    6. javax.сервлет.http.HttpSessionListener – Интерфейс для получения уведомлений об изменениях жизненного цикла HttpSession.
    7. javax.сервлет.http.HttpSessionBindingListener – Вызывает уведомление объекта, когда он привязан к сеансу или освобожден от него.
    8. javax.сервлет.http.HttpSessionAttributeListener – Интерфейс для получения уведомлений об изменениях атрибутов HttpSession.
    9. javax.сервлет.http.HttpSessionActivationListener – Объекты, привязанные к сеансу, могут прослушивать события контейнера, уведомляющие их о том, что сеансы будут пассивированы и этот сеанс будет активирован. Контейнер, который переносит сеанс между виртуальными машинами или сохраняет сеансы, должен уведомлять все атрибуты, связанные с сеансами, реализующими HttpSessionActivationListener.
  5. Конфигурация прослушивателя Сервлетов

  6. Мы можем использовать @WebListener аннотацию для объявления класса в качестве Прослушивателя, однако класс должен реализовывать один или несколько интерфейсов прослушивателя.

    Мы можем определить слушателя в web.xml как:

  7. Пример прослушивателя Сервлетов

  8. Давайте создадим простое веб-приложение, чтобы увидеть прослушиватель сервлетов в действии. Мы создадим динамический веб-проект в Eclipse Пример прослушивателя сервлетов структура проекта будет выглядеть так, как показано на рисунке ниже.

    web.xml : В дескрипторе развертывания я определю некоторые параметры инициализации контекста и конфигурацию прослушивателя.

    DBConnectionManager : Это класс для подключения к базе данных, для простоты я не предоставляю код для фактического подключения к базе данных. Мы установим этот объект в качестве атрибута в контекст сервлета.

    Мой сервлет : Простой класс сервлета, в котором я буду работать с сеансом, атрибутами и т. Д.

    Теперь мы реализуем классы прослушивателей, я предоставляю примеры классов прослушивателей для часто используемых прослушивателей – ServletContextListener, ServletContextAttributeListener, ServletRequestListener и HttpSessionListener.

  9. ServletContextListener

  10. Мы прочитаем параметры инициализации servletcontext для создания объекта DBConnectionManager и установим его в качестве атрибута объекта ServletContext.

  11. ServletContextAttributeListener

  12. Простая реализация для регистрации события, когда атрибут добавляется, удаляется или заменяется в servletcontext.

  13. HttpSessionListener

  14. Простая реализация для регистрации события при создании или уничтожении сеанса.

  15. ServletRequestListener

  16. Простая реализация интерфейса ServletRequestListener для регистрации IP-адреса ServletRequest при инициализации и уничтожении запроса.

    Теперь, когда мы развернем наше приложение и получим доступ к моему сервлету в браузере по URL https://localhost:8080/ServletListenerExample/MyServlet , мы увидим следующие журналы в файле журнала сервера.

    Обратите внимание на последовательность журналов, и это в порядке выполнения. Последний журнал появится, когда вы завершите работу приложения или завершите работу контейнера.

Это все для прослушивателя в сервлете, далее мы рассмотрим файлы cookie и некоторые распространенные примеры сервлетов.

Вы можете скачать проект по ссылке ниже и поиграть с ним, чтобы узнать больше.

Ознакомьтесь со следующей статьей из серии о Файлах cookie в сервлете .