¿Cuál es la diferencia entre el contexto de aplicación y el contexto de aplicación web?
¿Soy consciente de que WebApplicationContext
se usa para aplicaciones orientadas a la arquitectura Spring MVC?
¿Quiero saber para qué sirven las ApplicationContext
aplicaciones MVC? ¿Y en qué tipo de frijoles se definen ApplicationContext
?
spring
spring-mvc
applicationcontext
Sumit Trehan
fuente
fuente
web.xml
archivo; Esta pregunta es acerca de algunas clases de primavera.web.xml
se refiere a las variantes de configuración del bean Spring XML deApplicationContext
yWebApplicationContext
. Todas las definiciones de beanapplicationContext.xml
estarán disponibles enApplicationContext
mientras que todas las definiciones de bean*-servlet.xml
estarán disponibles en aWebApplicationContext
.Respuestas:
El contexto de la aplicación web amplió el contexto de la aplicación, que está diseñado para funcionar con el javax.servlet.ServletContext estándar para que pueda comunicarse con el contenedor.
Los beans, instanciados en WebApplicationContext también podrán usar ServletContext si implementan la interfaz ServletContextAware
Hay muchas cosas posibles para hacer con la instancia de ServletContext, por ejemplo, para acceder a los recursos WEB-INF (configuraciones xml y etc.) llamando al método getResourceAsStream (). Normalmente, todos los contextos de aplicación definidos en web.xml en una aplicación Spring de servlet son contextos de aplicación web, esto va tanto al contexto de la aplicación web raíz como al contexto de la aplicación del servlet.
Además, dependiendo de las capacidades de contexto de la aplicación web, puede hacer que su aplicación sea un poco más difícil de probar, y es posible que deba usar la clase MockServletContext para realizar pruebas.
Diferencia entre el servlet y el contexto raíz Spring le permite construir jerarquías de contexto de aplicación multinivel, por lo que el bean requerido se obtendrá del contexto padre si no está presente en el contexto de aplicación actual. En las aplicaciones web por defecto hay dos niveles de jerarquía, de raíces y de servlets: contextos .
Esto le permite ejecutar algunos servicios como singletons para toda la aplicación (los beans de Spring Security y los servicios básicos de acceso a la base de datos generalmente residen aquí) y otros como servicios separados en los servlets correspondientes para evitar conflictos de nombres entre beans. Por ejemplo, un contexto de servlet servirá las páginas web y otro implementará un servicio web sin estado.
Esta separación de dos niveles sale de la caja cuando usa las clases de servlet de primavera: para configurar el contexto de la aplicación raíz, debe usar la etiqueta context-param en su web.xml
(El contexto de la aplicación raíz es creado por ContextLoaderListener que se declara en web.xml
) y la etiqueta de servlet para los contextos de aplicación de servlet
Tenga en cuenta que si se omite init-param, spring usará myservlet-servlet.xml en este ejemplo.
Consulte también: Diferencia entre applicationContext.xml y spring-servlet.xml en Spring Framework
fuente
Volviendo a los días de Servlet, web.xml solo puede tener uno
<context-param>
, por lo que solo se crea un objeto de contexto cuando el servidor carga una aplicación y los datos en ese contexto se comparten entre todos los recursos (Ej: Servlets y JSP). Es lo mismo que tener el nombre del controlador de la base de datos en el contexto, que no cambiará. De manera similar, cuando declaramos el parámetro contextConfigLocation en<contex-param>
Spring crea un objeto Contexto de aplicación.Puede tener múltiples Servlets en una aplicación. Por ejemplo, es posible que desee manejar / seguro / * solicitudes de una manera y / non-seucre / * de otra manera. Para cada uno de estos Servlets, puede tener un objeto de contexto, que es un WebApplicationContext.
fuente
La respuesta aceptada es válida, pero hay una explicación oficial sobre esto:
Por cierto contexto servlet y raíz son tanto WebApplicationContext:
fuente
ApplicationContext (contexto de aplicación raíz): cada aplicación web Spring MVC tiene un archivo applicationContext.xml que se configura como la raíz de la configuración de contexto. Spring carga este archivo y crea un applicationContext para toda la aplicación. Este archivo lo carga ContextLoaderListener que está configurado como parámetro de contexto en el archivo web.xml. Y solo habrá un applicationContext por aplicación web.
WebApplicationContext: WebApplicationContext es un contexto de aplicación compatible con la web, es decir, tiene información de contexto de servlet. Una sola aplicación web puede tener múltiples WebApplicationContext y cada servlet Dispatcher (que es el controlador frontal de la arquitectura Spring MVC) está asociado con un WebApplicationContext. El archivo de configuración webApplicationContext * -servlet.xml es específico de un DispatcherServlet. Y dado que una aplicación web puede tener más de un servlet despachador configurado para atender múltiples solicitudes, puede haber más de un archivo webApplicationContext por aplicación web.
fuente
El contexto de aplicación web , especificado por la
WebApplicationContext
interfaz, es un contexto de aplicación Spring para aplicaciones web. Tiene todas las propiedades de un contexto de aplicación Spring regular, dado que laWebApplicationContext
interfaz extiende laApplicationContext
interfaz y agrega un método para recuperar la API de Servlet estándarServletContext
para la aplicación web.Además de los ámbitos estándar de Spring Bean
singleton
yprototype
, hay tres ámbitos adicionales disponibles en un contexto de aplicación web:request
- define una sola definición de bean para el ciclo de vida de una sola solicitud HTTP; es decir, cada solicitud HTTP tiene su propia instancia de un bean creado a partir de una definición de bean únicosession
- define una definición de bean único para el ciclo de vida de una sesión HTTPapplication
- Alcanza una definición de bean único al ciclo de vida de unServletContext
fuente