Как в Spring Boot работает встроенный веб-сервер (Tomcat)?

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

Ответ

Spring Boot использует встроенный (embedded) сервер приложений (по умолчанию Tomcat), что позволяет упаковывать приложение как самодостаточный исполняемый JAR-файл.

Принцип работы:

  1. Зависимость spring-boot-starter-web включает в себя Tomcat как транзитивную зависимость.
  2. При запуске SpringApplication.run() Spring Boot автоматически настраивает и запускает встроенный экземпляр Tomcat на порту 8080.
  3. Контроллеры, объявленные с @RestController, автоматически маппируются на этот сервер.

Пример контроллера:

@RestController
@RequestMapping("/api")
public class ExampleController {
    @GetMapping("/hello")
    public ResponseEntity<String> hello() {
        return ResponseEntity.ok("Hello from embedded Tomcat!");
    }
}

Конфигурация и кастомизация:

  • Смена порта: server.port=9090 в application.properties.
  • Контекстный путь: server.servlet.context-path=/myapp.
  • Замена сервера: Можно легко заменить Tomcat на Jetty или Undertow, исключив зависимость Tomcat и добавив другую.

Ключевое преимущество: Отсутствие необходимости в отдельной установке и настройке сервера приложений. Приложение «переносится со своим сервером».