Java EE. ServletContextListener.

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

Кроме того, возможно, что какие-то действия по инициализации или настройке приложения вам все равно нужно сделать до старта приложения и загрузки всех сервлетов в контейнер.

На этот случай в спецификации JavaEE предусмотрен специальный интерфейс – ServletContextListener. В его реализации вы можете поместить код, который обязательно будет выполнен до старта всего приложения.

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

Интерфейс ServletContextListener очень прост и содержит всего два метода:

Первый из них, contextInitialized(), вызывается сразу после создания контейнером объекта ServletContext, но до создания каких-либо сервлетов, фильтров и т. д.

Например, в веб-приложениях SpringMVC вам предоставляется класс ContextLoaderListener, который как раз и реализует этот интерфейс, создавая до старта приложения контекст Spring.

Таким образом еще до использования каких-либо бинов приложением у вас уже есть готовые сконфигурированные бины.

Второй метод, contextDestroyed()вызывается уже после уничтожения сервлетов и фильтров сервлетов и перед уничтожением объекта ServletContext.

Пример.

Создать слушатель ServletContextListener можно несколькими способами: реализовав данный интерфейс напрямую и прописав его в дескрипторе развертывания web.xml или воспользоваться специальной аннотацией @WebListener. Данный способ доступен начиная с версии спецификации Servlet API 3.0.

Воспользуемся более простым вариантом с аннотацией. Реализуем свой слушатель:

В реализации методов мы просто выведем сообщения в консоль.

Стартуем Tomcat:

На экране появилось сообщение от нашего слушателя, которое мы выводим в методе contextInitialized(). Напомним, что данный метод вызывается еще до старта самого приложения.

Теперь вы можете остановить приложение и увидеть, что метод contextDestroyed() также вызывается.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *