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:

Java

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/*");
    }
}
Kotlin

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/*")
    }
}
Además de utilizar la API ServletContext directamente, también puede ampliar AbstractAnnotationConfigDispatcherServletInitializer y anular los métodos especificados.
Para casos de uso programático, 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>
Spring Boot sigue una secuencia de inicialización diferente. En lugar de vincularse al ciclo de vida del contenedor de servlets, Spring Boot utiliza la configuración de Spring para iniciar y arrancar el contenedor de servlets integrado. Las declaraciones Filter y Servlet se encuentran en la configuración de Spring y se registran en el contenedor de servlets.