Spring Web MVC работает внутри контейнера сервлета, например Tomcat .
Даже при использовании Spring Boot, когда вам не нужно явно развертывать файл WAR в Tomcat экземпляр установлен на вашем компьютере, есть экземпляр Tomcat (или другой контейнер сервлета, такой как Jetty или Undertow - ну, не совсем контейнеры сервлета, но выполняющий ту же роль), работающий встроенный в ваше приложение Spring Boot.
Роль контейнера сервлетов заключается в реализации Спецификации сервлетов от JEE (сейчас Jakarta EE). Таким образом, именно контейнер сервлета отвечает за прослушивание порта (ов) HTTP (80, 8080, 443 ...), анализ запросов HTTP, которые он получает, и предоставление их верхним уровням через API сервлета.
Аналогично, Servlet API позволяет отправлять ответ клиенту. Он преобразует Java вызовы объектов и методов, которые мы передаем ему, в правильный HTTP-ответ и отправляет его по сети.
API сервлета является относительно низкоуровневым, и его непосредственное использование довольно многословно и утомительно , Вот почему MVC фреймворки, такие как Spring MVC (а до этого Struts и многие другие), а также JSF были построены поверх него.
(Обратите внимание, что не все Java веб-фреймворки являются построен на основе Servlet API. Одним из таких примеров является инфраструктура Play!).
Итак, Spring MVC, в свою очередь, использует Servlet API и строит его, в основном, скрывая, чтобы предоставьте вам, программисту приложения, свой собственный API и предложите вам гораздо больше удобства и функций, таких как
- , отправляющих запросы вашим контроллерам на основе URL запросов
- извлечения и синтаксический анализ JSON из тела запроса и представление его вам как Java объекты
- , помогающие с загрузкой файлов
- и т. д. *
Теперь, если вы используете реактивные конечные точки ( Spring Web Reactive Framework ), это немного отличается , и Servlet API может быть не задействован напрямую. Но это другая история.