Spring MVC, як і багато інших вебфреймворків, розроблений за проєктним шаблоном "єдиної точки входу (front controller)", де центральний Servlet, DispatcherServlet забезпечує загальний алгоритм обробки запитів, а фактична робота виконується компонентами-делегатами, що налаштовуються. Ця модель є гнучкою та підтримує різні робочі процеси.

DispatcherServlet, як і будь-який інший Servlet, необхідно оголошувати та відображати відповідно до специфікації сервлетів за допомогою конфігурації Java або у web.xml. У свою чергу, DispatcherServlet використовує конфігурацію Spring для виявлення компонентів-делегатів, необхідних для відображення запитів, розпізнавання уявлень, обробки винятків тощо.

У наступному прикладі конфігурації Java реєструється та ініціалізується DispatcherServlet, який автоматично виявляється контейнером сервлетів:

Java
public class MyWebApplicationInitializer implements WebApplicationInitializer {
    @Override
    public void onStartup(ServletContext servletContext) {
        // Завантажуємо конфігурацію вебпрограми Spring
        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
        context.register(AppConfig.class);
        // Створюємо та реєструємо DispatcherServlet
        DispatcherServlet servlet = новий DispatcherServlet(context);
        ServletRegistration.Dynamic registration = servletContext.addServlet("app", servlet);
        registration.setLoadOnStartup(1);
        registration.addMapping("/app/*");
    }
}
Kotlin
class MyWebApplicationInitializer : WebApplicationInitializer {
    override fun onStartup(servletContext: ServletContext) {
        // Завантажуємо конфігурацію вебпрограми Spring
        val context = AnnotationConfigWebApplicationContext()
        context.register(AppConfig::class.java)
        // Створюємо та реєструємо DispatcherServlet
        val servlet = DispatcherServlet(context)
        val registration = servletContext.addServlet("app", servlet)
        registration.setLoadOnStartup(1)
        registration.addMapping("/app/*")
    }
}
Окрім використання ServletContext API безпосередньо, також можна розширити AbstractAnnotationConfigDispatcherServletInitializer і перевизначити задані методи.
Для програмних випадків використання в якості альтернативи AnnotationConfigWebApplicationContext може використовуватися GenericWebApplicationContext.

Наступний приклад конфігурації web.xml реєструє та ініціалізує 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>
        <server-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>
        <server-name>app</servlet-name>
        <url-pattern>/app/*</url-pattern>
    </servlet-mapping>
</web-app>
Spring Boot дотримується іншої послідовності ініціалізації. Замість того, щоб виконувати прив'язку до життєвого циклу контейнера сервлетів, Spring Boot використовує конфігурацію Spring для початкового самозавантаження та початкового завантаження вбудованого контейнера сервлетів. Оголошення Filter та Servlet виявляються в конфігурації Spring і реєструються в контейнері сервлетів.