Что делают ContextLoaderListener и RequestContextListener?
У меня есть приложение, в котором я использую Spring. И в моей паутине.xml я использую строки ниже
<web-app>
....
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>
....
</web-app>
Что это такое ? Являются ли они обязательными ?
2 ответа:
org.springframework.web.context.ContextLoaderListener
это класс из Spring framework. Поскольку он реализует интерфейсServletContextListener
, контейнер сервлета уведомляет его при запуске (contextInitialized
) и при завершении работы (contextDestroyed
) веб-приложения.Именно он отвечает за загрузку (и упорядоченное завершение работы) Spring ApplicationContext.
Ref: javadoc говорит:
Загрузочный прослушиватель для запуска и завершения работы корневого веб-приложения Spring context. Просто делегирует ContextLoader, а также ContextCleanupListener.
org.springframework.web.context.request.RequestContextListener
это другой класс из того же фреймворка. Его javadoc говорит:Сервлет 2.4 + прослушиватель, который предоставляет запрос текущему потоку, как через LocaleContextHolder, так и через RequestContextHolder. Быть зарегистрированным в качестве слушателя в сети.XML.
В качестве альтернативы Spring RequestContextFilter и Spring DispatcherServlet также предоставляют один и тот же контекст запроса текущему потоку. В отличие от этого слушателя, расширенные опции доступно там (например, "threadContextInheritable").
Этот прослушиватель в основном предназначен для использования с сервлетами сторонних производителей, например, JSF FacesServlet. В рамках собственной веб-поддержки Spring обработка DispatcherServlet вполне достаточна.Поэтому он обычно не используется в приложении Spring MVC, но позволяет запрашивать или сеансовый боб в приложении JSF, используя Spring ApplicationContext
Слушатели, как правило, являются способом для контейнера уведомлять ваше приложение о событиях, а не просто веб-запросами.
Например, чтобы получать уведомления о времени ожидания сеанса, вы должны расширить HttpSessionListener и реализовать метод sessionDestroyed (). Контейнер затем вызовет это по истечении сеанса, и вы можете войти в него вместе со временем входа для этого пользователя.
Для ContextLoaderListener это позволяет запускать не связанные с вебом части вашего приложения, которые вы хотите запустить контейнер, а не ждать, когда кто-то ударит по одному из ваших компонентов spring. Он использует контекст-param contextConfigLocation, установленный ранее в вашем веб-сайте.xml, чтобы знать, с чего начать.
Для RequestContextListener вы получаете уведомление о создании и удалении запроса .
Необходимы ли они, зависит от архитектуры вашего приложения.