Front Controller централизует все входящие запросы через одну точку входа, которая делегирует логику конкретного запроса, вместо отдельных обработчиков, каждый из которых владеет собственной системой диспетчеризации. Каждый HTTP-запрос к приложению Spring MVC проходит через единственный DispatcherServlet, который запрашивает HandlerMapping, какой метод контроллера должен его обрабатывать, и отправляет его соответствующим образом — вы никогда не регистрируете отдельный сервлет для каждой конечной точки.
Пример
@WebMvcTest(OrderController.class)classOrderControllerTest {
@Autowired MockMvc mockMvc;
@MockBean OrderService orderService; // real service NOT loaded - only the web layer is@Testvoidreturns404WhenOrderMissing()throws Exception {
given(orderService.findById(1L)).willThrow(newOrderNotFoundException(1L));
mockMvc.perform(get("/api/orders/1"))
.andExpect(status().isNotFound())
.andExpect(jsonPath("$.code").value("ORDER_NOT_FOUND"));
}
}
Итог
Front Controller централизует все входящие запросы через одну точку входа, которая делегирует логику конкретного запроса, вместо отдельных обработчиков, каждый из которых владеет собственной системой диспетчеризации.
Как DispatcherServlet является примером шаблона Front Controller? · Sobeso