Un'applicazione web standard di primavera (creata da Roo o modello "Spring MVC Project") crea un file web.xml con ContextLoaderListenere DispatcherServlet. Perché non usano solo DispatcherServlete per caricare la configurazione completa?
Capisco che ContextLoaderListener dovrebbe essere usato per caricare le cose che non sono rilevanti per il web e il DispatcherServlet viene usato per caricare le cose rilevanti per il web (controller, ...). E questo si traduce in due contesti: un contesto genitore e uno figlio.
Sfondo:
L'ho fatto in questo modo standard per diversi anni.
<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>
Ciò ha spesso causato problemi con i due contesti e le dipendenze tra di loro. In passato sono sempre stato in grado di trovare una soluzione, e ho la forte sensazione che questo renda sempre migliore la struttura / architettura del software. Ma ora sto affrontando un problema con gli eventi di entrambi i contesti .
- Tuttavia questo mi fa ripensare a questo schema a due contesti, e mi chiedo: perché dovrei mettermi in questo guaio, perché non caricare tutti i file di configurazione della molla con uno DispatcherServlete rimuovere ContextLoaderListenercompletamente il file. (Avrò ancora diversi file di configurazione, ma solo un contesto.)
C'è qualche motivo per non rimuovere il ContextLoaderListener?