Spring Boot: инициализация контекста сервлета

Инициализация контекста сервлета

Встроенные контейнеры сервлетов не выполняют непосредственно интерфейс Servlet 3.0+ javax.servlet.ServletContainerInitializer или Spring org.springframework.web.WebApplicationInitializer. Это намеренное проектное решение, призванное снизить риск того, что сторонние библиотеки, предназначенные для работы внутри war, могут сломать приложения Spring Boot.

Если вам нужно выполнить инициализацию контекста сервлета в приложении Spring Boot, вы должны зарегистрировать bean-компонент, который реализует интерфейс org.springframework.boot.web.servlet.ServletContextInitializer. Один метод onStartup обеспечивает доступ к ServletContext и, при необходимости, может легко использоваться в качестве адаптера к существующему WebApplicationInitializer.

Сканирование для сервлетов, фильтров и слушателей

При использовании встроенного контейнера автоматическая регистрация классов, аннотированных с помощью @WebServlet, @WebFilter и @WebListener, может быть включена с помощью @ServletComponentScan.

@ServletComponentScan не действует в автономном контейнере, где вместо него используются встроенные механизмы обнаружения контейнера.

ServletWebServerApplicationContext

Spring Boot использует другой тип ApplicationContext для поддержки встроенного контейнера сервлета. ServletWebServerApplicationContext - это особый тип WebApplicationContext, который загружается автоматически путем поиска одного компонента ServletWebServerFactory. Обычно TomcatServletWebServerFactory, JettyServletWebServerFactory или UndertowServletWebServerFactory настраиваются автоматически.

Обычно вам не нужно знать об этих классах реализации. Большинство приложений настраиваются автоматически, и от вашего имени создаются соответствующие ApplicationContext и ServletWebServerFactory.


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки