Gymterview
middle

Как устроена архитектура Spring MVC? Что такое DispatcherServlet?

Spring MVC – веб-фреймворк, построенный по паттерну Front Controller. Все HTTP-запросы проходят через единую точку входа – DispatcherServlet.

Архитектура обработки запроса

Пример
Клиент
   | HTTP запрос
DispatcherServlet
   |
HandlerMapping --> определяет контроллер
   |
HandlerAdapter --> вызывает метод контроллера
   |
Controller --> выполняет бизнес-логику
   |
HttpMessageConverter --> сериализует в JSON (для @RestController)
   или ViewResolver --> рендерит HTML (для @Controller)
   |
Клиент <-- HTTP ответ

Фильтры и интерсепторы

Пример
HTTP запрос -> Filter1 -> Filter2 -> DispatcherServlet -> Interceptor.preHandle
                                                             -> Controller
                                                         <- Interceptor.postHandle
                                                         <- Interceptor.afterCompletion
              <- Filter2 <- Filter1 <- HTTP ответ
Пример интерсептора
@Component
public class LoggingInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
                             Object handler) {
        return true; // true = продолжить, false = прервать
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response,
                           Object handler, ModelAndView modelAndView) { }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
                                 Object handler, Exception ex) { }
}

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoggingInterceptor())
                .addPathPatterns("/api/**");
    }
}

На собеседовании: назовите основные компоненты (DispatcherServlet, HandlerMapping, HandlerAdapter, ViewResolver/HttpMessageConverter) и порядок обработки. Частая ошибка – не знать разницу между Filter и Interceptor (Filter работает на уровне сервлета, Interceptor – на уровне Spring MVC).