Un'applicazione web standard di primavera (creata da Roo o modello "Spring MVC Project") crea un file web.xml con ContextLoaderListener
e DispatcherServlet
. Perché non usano solo DispatcherServlet
e 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 DispatcherServlet
e rimuovere ContextLoaderListener
completamente il file. (Avrò ancora diversi file di configurazione, ma solo un contesto.)
C'è qualche motivo per non rimuovere il ContextLoaderListener
?