Слушатели (Listeners) в Java-сервлетах

Часто бывает нужно проследить выполнение каких-то действий в сессии или контексте и т.д.

Для этого используются слушатели.

Например, для прослушивания событий происходящих с аттрибутами реализуется интерфейс ServletContextAttributeListener.

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

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

Интерфейсов слушателей довольно много. Для примера рассмотрим ServletContextAttributeListener.

Пример программы:

import javax.servlet.ServletContextAttributeEvent; import javax.servlet.ServletContextAttributeListener; import javax.servlet.annotation.*; @WebListener //пометим что класс является слушателем public class ServletContextAttributeListenerExample implements ServletContextAttributeListener{ //Этот метод вызывается //при добавлении атрибута в объект ServletContext. public void attributeAdded(ServletContextAttributeEvent scab){ System.out.println(“An attribute was added to the ” + “ServletContext object”); } //Этот метод вызывается, когда атрибут удаляется //из объекта ServletContext. public void attributeRemoved(ServletContextAttributeEvent scab){ System.out.println(“An attribute was removed from ” + “the ServletContext object”); } //Этот метод вызывается при замене атрибута //в объекте ServletContext. public void attributeReplaced(ServletContextAttributeEvent scab){ System.out.println(“An attribute was replaced in ” + “the ServletContext object”); } }

Сервлет вызывающий метод слушателя

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

Пример программы:

import java.util.*; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.*; @WebServlet(“/listenerservlet”) public class MyServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter pw = response.getWriter(); ServletContext scont = request.getServletContext(); scont.setAttribute(“attrName”, “attrVal”); } }

Проверка работы слушателя

Скомпилируем файл сервлета и файл слушателя и в адресной строке перейдем по адресу /listenerservlet.

В консоли запущенного Tomcat можно увидеть сообщение из метода attributeAdded, что значит что слушатель работает.

Оптимизация сервлетов с AsyncContext

Используйте AsyncContext в Java сервлетах для асинхронной обработки задач. Узнайте, как избежать простоя потоков и повысить производительность веб-приложений с примерами кода.
Time to read: 11

Азы работы с Java Server Pages (JSP)

Основы JSP: создание первой JSP-страницы, преобразование JSP в сервлеты, преимущества перед чистым HTML. Практическое руководство по началу работы с Java Server Pages.
Time to read: 17

Комментарии в JSP

Разбираем два типа комментариев в JSP: HTML и JSP. Узнайте, как правильно использовать теги и , а также другие JSP-директивы для эффективной разработки.
Time to read: 11