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