Слушатели (Listeners) в Java сервлетах
Last updated: 10 мая 2025 г.Часто бывает нужно проследить выполнение каких-то действий в сессии или контексте и т.д.
Для этого используются слушатели.
Например, для прослушивания событий происходящих с аттрибутами реализуется интерфейс ServletContextAttributeListener
.
В примере слушателя ниже определены методы, которые будут срабатывать когда в контекст добавляются, удаляются или заменяются аттрибуты. Мы будем уведомлены о событиях с аттрибутами.
Можно, например, отслеживать точное время когда аттрибут был удален, добавлен или изменен или можно инициализировать какие-то данные при каких-то событиях, иногда это может пригодиться.
Интерфейсов слушателей довольно много. Для примера рассмотрим ServletContextAttributeListener
.
Пример программы:
1import javax.servlet.ServletContextAttributeEvent;
2import javax.servlet.ServletContextAttributeListener;
3import javax.servlet.annotation.*;
4
5@WebListener //пометим что класс является слушателем
6public class ServletContextAttributeListenerExample
7 implements ServletContextAttributeListener{
8
9 //Этот метод вызывается
10 //при добавлении атрибута в объект ServletContext.
11 public void attributeAdded(ServletContextAttributeEvent scab){
12 System.out.println("An attribute was added to the "
13 + "ServletContext object");
14 }
15
16 //Этот метод вызывается, когда атрибут удаляется
17 //из объекта ServletContext.
18 public void attributeRemoved(ServletContextAttributeEvent scab){
19 System.out.println("An attribute was removed from "
20 + "the ServletContext object");
21 }
22
23 //Этот метод вызывается при замене атрибута
24 //в объекте ServletContext.
25 public void attributeReplaced(ServletContextAttributeEvent scab){
26 System.out.println("An attribute was replaced in "
27 + "the ServletContext object");
28 }
29}
Сервлет вызывающий метод слушателя
Ниже простейший сервлет, в котором просто добавляется аттрибут в контекст. При добавлении аттрибута должен будет вызваться переопределенный нами метод attributeAdded
из класса определенного нами выше.
Пример программы:
1import java.util.*;
2import java.io.IOException;
3import java.io.PrintWriter;
4
5import javax.servlet.*;
6import javax.servlet.http.*;
7import javax.servlet.annotation.*;
8
9@WebServlet("/listenerservlet")
10public class MyServlet extends HttpServlet {
11 public void doGet(HttpServletRequest request,
12 HttpServletResponse response)
13 throws ServletException, IOException {
14 PrintWriter pw = response.getWriter();
15 ServletContext scont = request.getServletContext();
16 scont.setAttribute("attrName", "attrVal");
17 }
18}
Проверка работы слушателя
Скомпилируем файл сервлета и файл слушателя и в адресной строке перейдем по адресу /listenerservlet
.

В консоли запущенного Tomcat можно увидеть сообщение из метода attributeAdded, что значит что слушатель работает.
Следующие уроки
Оптимизация сервлетов с AsyncContext
11
мин.
Азы работы с Java Server Pages (JSP)
17
мин.
Комментарии в JSP
11
мин.