Короткий ответ
DispatcherServlet — фронт-контроллер Spring MVC: он принимает все входящие HTTP-запросы, направляет их к нужным контроллерам, координирует обработку и возвращает ответ клиенту. Архитектурно Spring MVC делит приложение на Model, View и Controller, а DispatcherServlet служит единой точкой входа для всех запросов.
Как это работает подробнее
Полная цепочка типового запроса в Spring Boot-приложении: клиент → DispatcherServlet → Controller → Service → Repository → база данных, а результат возвращается через контроллер клиенту в виде представления или JSON. В Spring Boot DispatcherServlet настраивается автоматически при подключении spring-boot-starter-web: встроенный Tomcat и авто-конфигурация Spring MVC уже включены.
- Приём запроса: клиент отправляет HTTP-запрос, и он попадает в DispatcherServlet.
- Маршрутизация: по маппингам запросов (
@RequestMapping,@GetMapping) DispatcherServlet определяет, какой контроллер обработает запрос. - Обработка: контроллер взаимодействует с моделью и сервисным слоем и возвращает модель с именем представления либо сразу данные.
- Рендеринг ответа: DispatcherServlet выбирает представление (JSP, Thymeleaf) или подготавливает ответ; представление рендерит данные в итоговый ответ клиенту.
Пример кода
GreetingController.java
@Controller
public class GreetingController {
@GetMapping("/greeting")
public String greeting(Model model) {
model.addAttribute("message", "Hello");
return "greeting";
}
}Что использовать на практике
- Для страниц MVC-приложения используйте
@Controller, возвращая имя представления, а для REST —@RestController. - В Spring Boot не регистрируйте DispatcherServlet вручную: его настраивает авто-конфигурация при подключении
spring-boot-starter-web. - Держите в голове полную цепочку запроса: DispatcherServlet → Controller → Service → Repository → БД.
Подводные камни
- Не путайте роль DispatcherServlet (маршрутизация всех запросов) с работой контроллера (обработка конкретного запроса).
- В
@Controllerвозврат строки — это имя представления, а не текст ответа; для данных в теле ответа нужен@ResponseBodyили@RestController. - Без
spring-boot-starter-web(или явной настройки Spring MVC) DispatcherServlet автоматически не появится.
Как отвечать на собеседовании
- Назовите DispatcherServlet фронт-контроллером Spring MVC → опишите поток: запрос попадает в DispatcherServlet → по маппингу выбирается контроллер → контроллер работает с сервисами и возвращает модель и имя представления → выбирается view и рендерится ответ → добавьте, что в Spring Boot всё настраивается автоматически.