Ответ
Spring MVC — это фреймворк, построенный поверх стандартного Servlet API. Его ядро — DispatcherServlet, который действует как единый Front Controller, обрабатывающий все входящие HTTP-запросы.
Архитектура обработки запроса:
graph LR
A[HTTP Request] --> B[DispatcherServlet]
B --> C[Handler Mapping]
C --> D[Controller]
D --> E[ModelAndView]
E --> F[View Resolver]
F --> G[View]
G --> H[HTTP Response]
1. Регистрация DispatcherServlet
Он объявляется как единственный сервлет в web.xml или через Java-конфигурацию SpringBootServletInitializer.
<!-- web.xml -->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/application-context.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
2. Процесс обработки запроса внутри DispatcherServlet:
HandlerMapping: Определяет, какой контроллер (@Controller) должен обработать запрос, на основе URL (@RequestMapping).HandlerAdapter: Вызывает метод контроллера, связывает параметры (аргументы метода,@ModelAttribute).ViewResolver: Преобразует логическое имя представления, возвращённое контроллером, в конкретное представление (JSP, Thymeleaf).
3. Ключевое отличие от чистого Servlet API
Spring MVC абстрагирует низкоуровневые операции HttpServletRequest/HttpServletResponse, предлагая декларативный подход.
// Чистый Servlet
protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
String name = req.getParameter("name");
// ... ручная обработка
}
// Spring MVC Controller
@GetMapping("/greet")
public String greet(@RequestParam String name, Model model) {
model.addAttribute("message", "Hello " + name);
return "greet-view"; // ViewResolver найдёт greet-view.jsp
}
Таким образом, Spring MVC не заменяет сервлеты, а предоставляет мощную абстракцию для удобной разработки веб-слоя.