Il contesto dell'applicazione Web ha esteso il contesto dell'applicazione progettato per funzionare con javax.servlet.ServletContext standard in modo che sia in grado di comunicare con il contenitore.
public interface WebApplicationContext extends ApplicationContext {
ServletContext getServletContext();
}
I bean, istanziati in WebApplicationContext saranno anche in grado di utilizzare ServletContext se implementano l'interfaccia ServletContextAware
package org.springframework.web.context;
public interface ServletContextAware extends Aware {
void setServletContext(ServletContext servletContext);
}
Esistono molte cose da fare con l'istanza ServletContext, ad esempio l'accesso alle risorse WEB-INF (configurazioni XML e così via) chiamando il metodo getResourceAsStream (). In genere tutti i contesti di applicazione definiti in web.xml in un'applicazione Spring servlet sono contesti di applicazioni Web, questo va sia al contesto di webapp root che al contesto di app del servlet.
Inoltre, a seconda delle funzionalità del contesto dell'applicazione Web potrebbe rendere l'applicazione un po 'più difficile da testare e potrebbe essere necessario utilizzare la classe MockServletContext per i test.
Differenza tra servlet e contesto root
Spring consente di creare gerarchie di contesto per applicazioni multilivello, quindi il bean richiesto verrà recuperato dal contesto padre se non è presente nel contesto dell'applicazione corrente. In applicazioni web di default ci sono due livelli di gerarchia, radice e servlet contesti: .
Ciò consente di eseguire alcuni servizi come singoli punti per l'intera applicazione (i bean Spring Security e i servizi di accesso al database di base in genere risiedono qui) e un altro come servizi separati nei servlet corrispondenti per evitare conflitti di nomi tra bean. Ad esempio, un contesto servlet servirà le pagine Web e un altro implementerà un servizio Web senza stato.
Questa separazione a due livelli viene fuori dalla scatola quando si usano le classi servlet di primavera: per configurare il contesto dell'applicazione root è necessario usare il tag context-param nel proprio web.xml
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/root-context.xml
/WEB-INF/applicationContext-security.xml
</param-value>
</context-param>
(il contesto dell'applicazione root è creato da ContextLoaderListener che è dichiarato in web.xml
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
) e tag servlet per i contesti dell'applicazione servlet
<servlet>
<servlet-name>myservlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>app-servlet.xml</param-value>
</init-param>
</servlet>
Si noti che se init-param verrà omesso, in questo esempio spring utilizzerà myservlet-servlet.xml.
Vedi anche: Differenza tra applicationContext.xml e spring-servlet.xml in Spring Framework
web.xml
file; questa domanda è su alcune lezioni di primavera.