Spring MVC, como muchos otros frameworks web, está diseñado utilizando un patrón de diseño de "inicio de sesión único (controlador frontal)", donde un Servlet
central, DispatcherServlet
, proporciona un algoritmo común para procesar solicitudes y el trabajo real lo realizan componentes delegados personalizados. Este modelo es flexible y admite una variedad de flujos de trabajo.
DispatcherServlet
, como cualquier otro Servlet
, debe declararse y representarse de acuerdo con la especificación del Servlet usando la configuración de Java o en web.xml
. A su vez, DispatcherServlet
usa la configuración de Spring para descubrir los beans delegados que necesita para procesar solicitudes, reconocer vistas, manejar excepciones, etc.
El siguiente ejemplo de configuración de Java registra e inicializa un DispatcherServlet
que el contenedor de servlet descubre automáticamente:
public class MyWebApplicationInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) {
// Carga la configuración de la aplicación web Spring
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.register(AppConfig.class);
// Crea y registra DispatcherServlet
DispatcherServlet servlet = new DispatcherServlet(context);
ServletRegistration.Dynamic registration = servletContext.addServlet("app", servlet);
registration.setLoadOnStartup(1);
registration.addMapping("/app/*");
}
}
class MyWebApplicationInitializer : WebApplicationInitializer {
override fun onStartup(servletContext: ServletContext) {
// Carga la configuración de la aplicación web Spring
val context = AnnotationConfigWebApplicationContext()
context.register(AppConfig::class.java)
// Crea y registra DispatcherServlet
val servlet = DispatcherServlet(context)
val registration = servletContext.addServlet("app", servlet)
registration.setLoadOnStartup(1)
registration.addMapping("/app/*")
}
}
AbstractAnnotationConfigDispatcherServletInitializer
y anular los métodos especificados.
AnnotationConfigWebApplicationContext
se puede utilizar como alternativa a
AnnotationConfigWebApplicationContext
.
El siguiente ejemplo de configuración web.xml
registra e inicializa el DispatcherServlet
:
<web-app>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/app-context.xml</param-value>
</context-param>
<servlet>
<servlet-name>app</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value></param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>app</servlet-name>
<url-pattern>/app/*</url-pattern>
</servlet-mapping>
</web-app>
Filter
y
Servlet
se encuentran en la configuración de Spring y se registran en el contenedor de servlets.
GO TO FULL VERSION