Стандартний весняний веб-додаток (створений Roo або «Шаблон весняного проекту MVC») створить 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>
Це часто спричиняло проблеми з двома контекстами та залежностями між ними. У минулому я завжди міг знайти рішення, і у мене є сильне відчуття, що це робить структуру / архітектуру програмного забезпечення завжди кращою. Але зараз я стикаюся з проблемою подій обох контекстів .
- Однак це змушує переосмислити цю дві контекстні картини, і я запитую себе: чому я повинен привести себе в цю проблему, чому не завантажувати всі файли конфігурації весни одним DispatcherServlet
і видаляти ContextLoaderListener
повністю. (У мене все одно будуть різні файли конфігурації, але лише один контекст.)
Чи є якісь причини не видаляти ContextLoaderListener
?