Что такое DispatcherServlet в Spring MVC?

«Что такое DispatcherServlet в Spring MVC?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

DispatcherServlet — это центральный сервлет-диспетчер (Front Controller) в Spring MVC, который координирует обработку каждого HTTP-запроса. Он является единой точкой входа для приложения.

Роль и рабочий поток:

  1. Получает запрос от контейнера сервлетов.
  2. Делегирует запрос цепочке компонентов для обработки:
    • HandlerMapping: Определяет, какой контроллер (@Controller) должен обработать запрос.
    • HandlerAdapter: Вызывает метод контроллера с привязкой параметров.
    • Controller: Выполняет бизнес-логику и возвращает имя представления или объект данных.
    • ViewResolver: Сопоставляет имя представления с конкретным View (JSP, Thymeleaf).
    • View: Визуализирует ответ (HTML, JSON и т.д.).
  3. Возвращает ответ клиенту.

Конфигурация (на примере Java Config):

public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[] { RootConfig.class }; // Сервисы, репозитории
    }
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[] { WebConfig.class }; // Контроллеры, ViewResolver
    }
    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" }; // Обрабатывает все запросы
    }
}

Почему это важно: DispatcherServlet инкапсулирует общую логику маршрутизации, обработки исключений, интернационализации, что позволяет разработчику фокусироваться на бизнес-коде в контроллерах.