У меня есть googled, но не нашел удовлетворительного ответа, было бы здорово, если бы вы, ребята, могли объяснить разницу между ContextLoaderListener
и RequestContextListener
.
Разница между ContextLoaderListener и RequestContextListener?
Ответ 1
contextloaderlistener: - Слушатель загрузки для запуска Spring root WebApplicationContext. Просто делегирует ContextLoader.
requestcontextlistener: - Этот слушатель в основном предназначен для использования с сторонними сервлетами, например. JSF FacesServlet. В пределах Spring собственной веб-поддержки обработка DispatcherServlet вполне достаточна.
Ответ 2
Я читал, что если вы используете ContextLoaderListener, вам не нужен RequestContextListener или Filter. Он регистрирует текущий запрос (атрибуты) в локальном потоке, чтобы его можно было использовать с помощью прокси-серверов.
Ответ 3
Если вы используете веб-контейнер Servlet 2.5, запросы, обработанные за пределами Spring s DispatcherServlet (например, при использовании JSF или Struts), вам нужно для регистрации org.springframework.web.context.request.RequestContextListener Сервлет. Для Servlet 3.0+ это можно сделать программно с помощью Интерфейс WebApplicationInitializer. В качестве альтернативы или для старых контейнеров добавьте следующие объявление в веб-приложениях web.xml файл:
<listener> <listener-class> org.springframework.web.context.request.RequestContextListener </listener-class> </listener> </web-app>
Ответ 4
ContextLoaderListener - это загрузочный прослушиватель для запуска Spring root WebApplicationContext.
RequestContextListener используется, когда вы хотите, чтобы атрибуты в потоке запроса оставались в живых.
Здесь следует отметить, что наследуемый флаг установлен в false в RequestContextListener.
Итак, если вы хотите, чтобы дочерний поток наследовал атрибуты запроса, вы должны попробовать использовать RequestContextFilter или RequestContextHolder.