DispatcherServlet

Базовый Spring
≈ 1 мин чтения

Единая точка входа в Spring MVC

В Spring MVC большинство HTTP-запросов сначала попадает в DispatcherServlet. Это front controller: он не содержит бизнес-логику конкретных endpoints, а координирует остальные части web-слоя. Его задача — понять, кто должен обработать запрос, вызвать этот обработчик и организовать формирование ответа.

Упрощённый путь запроса выглядит так:

  1. DispatcherServlet получает HTTP-запрос.
  2. Spring MVC ищет подходящий метод контроллера.
  3. Фреймворк подготавливает аргументы метода и вызывает его.
  4. Возвращённое значение преобразуется в нужное представление HTTP-ответа.

Почему контроллеру не нужен Servlet API

Без такого слоя обработчик обычно был бы сильнее связан с объектами вроде HttpServletRequest и HttpServletResponse. DispatcherServlet вместе с инфраструктурой Spring MVC скрывает большую часть этой механики, поэтому метод контроллера может работать с более удобными Java-типами.

@GetMapping("/users/{id}")
UserDto user(@PathVariable long id) {
    return userService.find(id);
}

Метод не ищет параметр в Servlet request вручную и не пишет JSON в response самостоятельно. Spring MVC выполняет связующую работу вокруг него.

DispatcherServlet не выбирает метод контроллера «по имени метода». Выбор определяется web-mapping приложения. Механизм этих mappings разберём отдельно.