Как spring-boot может обслуживать определенные URL?
В моем предыдущем опыте:
- При использовании чистого
servlet
Мы определяем сервлеты так, чтобы они обслуживали запросы, соответствующие конкретным URL. - Когда используешь
struts2
Мы определяем фильтр так, чтобы он обслуживал запросы, соответствующие определенным URL. - Когда используешь
springMVC
в традиционном стиле конфигурации xml мы определяем сервлет диспетчера, чтобы он обслуживал запросы, соответствующие определенным URL-адресам.
Но с spring-boot
:
Кажется, что сервлет или фильтр не определены явно. Но это все еще может служить конкретные URL.
Вопросы это:
- Это все еще использует сервлет? Если да, то как он может обслуживать URL-адреса без явного определения сервлета или фильтра?
Дополнительные связанные вопросы (основаны на подсказках из комментариев):
- Кажется, реализация
SpringBootServletInitializer
будет задействован при развертывании, но кто будет его вызывать?
1 ответ
Решение
Как вы можете видеть здесь подробно, при запуске, при инициализации встроенного сервера (Tomcat по умолчанию), Spring Boot создает и регистрирует DispatcherServlet
как сервлет.
Spring затем, как обычно, сканирует ваши собственные классы (включая тот, который вы вызываете SpringApplication.run()
from) и устанавливает соответствующее отображение для ваших контроллеров, если оно у вас есть. Например отображение для /hello
Вот:
@RestController
@EnableAutoConfiguration
public class TestSpring {
@RequestMapping("/hello")
String hello() {
return "Hello World!";
}
public static void main(String[] args) throws Exception {
SpringApplication.run(TestSpring.class, args);
}
}