[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-servlety-zachem-v-servletakh-ispolzuyutsya-razlichnye-listener":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":16,"progress":17,"seo":18},524,"zachem-v-servletakh-ispolzuyutsya-razlichnye-listener",13,"servlety","Сервлеты","🖧","Зачем в сервлетах используются различные listener","Listener (слушатель) — это Java-класс, реализующий один из интерфейсов `javax.servlet.*Listener`, который работает как триггер и выполняет действия при наступлении событий жизненного цикла: создание\u002Fуничтожение запроса, сессии, контекста приложения, а также изменение их атрибутов.\n\n### Слушатели по области видимости\n\n| Область | Слушатель | Отслеживает |\n|---------|----------|-------------|\n| Request | `ServletRequestListener` | Создание и уничтожение запроса |\n| Request | `ServletRequestAttributeListener` | Изменение атрибутов запроса |\n| Context | `ServletContextListener` | Инициализация и уничтожение контекста приложения |\n| Context | `ServletContextAttributeListener` | Изменение атрибутов контекста |\n| Session | `HttpSessionListener` | Создание и уничтожение сессии |\n| Session | `HttpSessionAttributeListener` | Изменение атрибутов сессии (регистрируется в `web.xml`) |\n| Session | `HttpSessionBindingListener` | Привязка\u002Fотвязка объекта от сессии (реализуется самим объектом) |\n| Session | `HttpSessionActivationListener` | Миграция сессии между JVM в кластере |\n\n### Регистрация слушателя\n\n```xml\n\u003Clistener>\n    \u003Clistener-class>xyz.company.ExampleListener\u003C\u002Flistener-class>\n\u003C\u002Flistener>\n```\n\nИли через аннотацию `@WebListener` (Servlet 3+).\n\n`HttpSessionBindingListener` отличается от остальных: он не регистрируется в `web.xml`, а реализуется самим объектом, который помещается в сессию через `setAttribute()`. Контейнер автоматически вызывает `valueBound()`\u002F`valueUnbound()` при добавлении\u002Fудалении такого объекта.\n\n> **На собеседовании:** ключевой вопрос — разница между `HttpSessionAttributeListener` и `HttpSessionBindingListener`. Первый — глобальный (один на все сессии), второй — локальный (привязан к конкретному объекту в сессии).","","middle",[15],"servlets",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":21,"keywords":22,"schemaAnswer":23,"featuredSnippetReady":24},"Зачем в сервлетах используются различные listener — Gymterview","Listener (слушатель) — это Java-класс, реализующий один из интерфейсов `javax.servlet.*Listener`, который работает как триггер и выполняет действия при наступле","Listener (слушатель) — это Java-класс, реализующий один из интерфейсов `javax.servlet.*Listener`, который работает как т",[15,13],"Listener (слушатель) — это Java-класс, реализующий один из интерфейсов `javax.servlet.*Listener`, который работает как триггер и выполняет действия при наступлении событий жизненного цикла: создание\u002Fуничтожение запроса, сессии, контекста приложения, а также изменение их атрибутов.",true]