Что делают 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 4

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 вы получаете уведомление о создании и удалении запроса .

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