Gymterview
middle

Зачем в сервлетах используются различные listener

Listener (слушатель) — это Java-класс, реализующий один из интерфейсов javax.servlet.*Listener, который работает как триггер и выполняет действия при наступлении событий жизненного цикла: создание/уничтожение запроса, сессии, контекста приложения, а также изменение их атрибутов.

Слушатели по области видимости

Область Слушатель Отслеживает
Request ServletRequestListener Создание и уничтожение запроса
Request ServletRequestAttributeListener Изменение атрибутов запроса
Context ServletContextListener Инициализация и уничтожение контекста приложения
Context ServletContextAttributeListener Изменение атрибутов контекста
Session HttpSessionListener Создание и уничтожение сессии
Session HttpSessionAttributeListener Изменение атрибутов сессии (регистрируется в web.xml)
Session HttpSessionBindingListener Привязка/отвязка объекта от сессии (реализуется самим объектом)
Session HttpSessionActivationListener Миграция сессии между JVM в кластере

Регистрация слушателя

Пример
<listener>
    <listener-class>xyz.company.ExampleListener</listener-class>
</listener>

Или через аннотацию @WebListener (Servlet 3+).

HttpSessionBindingListener отличается от остальных: он не регистрируется в web.xml, а реализуется самим объектом, который помещается в сессию через setAttribute(). Контейнер автоматически вызывает valueBound()/valueUnbound() при добавлении/удалении такого объекта.

На собеседовании: ключевой вопрос — разница между HttpSessionAttributeListener и HttpSessionBindingListener. Первый — глобальный (один на все сессии), второй — локальный (привязан к конкретному объекту в сессии).