Стандартное весеннее веб-приложение (созданное с помощью шаблона Roo или Spring MVC Project) создает файл web.xml с ContextLoaderListener
и DispatcherServlet
. Почему они не только используют DispatcherServlet
и загружают его полностью?
Я понимаю, что ContextLoaderListener должен использоваться для загрузки материала, не относящегося к сети, а DispatcherServlet используется для загрузки материала, относящегося к сети (Controllers, ...). И это приводит к двум контекстам: родительский и дочерний контекст.
Справочная информация:
Я делал это стандартным способом в течение нескольких лет.
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:META-INF/spring/applicationContext*.xml</param-value>
</context-param>
<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Handles Spring requests -->
<servlet>
<servlet-name>roo</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/spring/webmvc-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
Это часто вызывало проблемы с двумя контекстами и зависимостями между ними. В прошлом мне всегда удавалось найти решение, и у меня было сильное чувство, что это всегда делает структуру / архитектуру программного обеспечения лучше. Но теперь я сталкиваюсь с проблемой с событиями в обоих контекстах .
- Однако это заставляет меня переосмыслить эту модель двух контекстов, и я спрашиваю себя: почему я должен попасть в эту проблему, почему бы не загрузить все файлы конфигурации Spring одним DispatcherServlet
и полностью удалить ContextLoaderListener
. (У меня все еще будут разные конфигурационные файлы, но только один контекст.)
Есть ли причина не удалять ContextLoaderListener
?