Как Spring Framework связан с Java Servlet API?

«Как Spring Framework связан с Java Servlet API?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Spring, и в частности Spring MVC, построен поверх Java Servlet API, но предоставляет высокоуровневую абстракцию, которая скрывает низкоуровневую работу с сервлетами от разработчика.

Ключевые моменты:

  1. Центральный сервлет: DispatcherServlet — это единственный сервлет, который обрабатывает все входящие HTTP-запросы в Spring MVC приложении. Он действует как front controller.
  2. Абстракция: Вместо написания собственных сервлетов разработчик создает контроллеры с аннотациями (@RestController, @GetMapping), которые DispatcherServlet находит и вызывает.

Конфигурация DispatcherServlet (традиционное веб-приложение):

<!-- 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/spring-config.xml</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

Spring Boot: Конфигурация DispatcherServlet регистрируется автоматически. Разработчик пишет только контроллеры:

@RestController
public class ExampleController {
    @GetMapping("/api/data")
    public ResponseEntity<Data> getData() {
        // DispatcherServlet маршрутизирует сюда запросы на GET /api/data
        return ResponseEntity.ok(new Data());
    }
}

Вывод: Servlet API — это фундамент, но Spring инкапсулирует его, предлагая более удобную модель программирования.