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).