Spring Boot: поддержка встроенных контейнеров сервлетов

Spring Boot включает поддержку встроенных серверов Tomcat, Jetty и Undertow. Большинство разработчиков используют соответствующий «Starter» для получения полностью настроенного экземпляра. По умолчанию встроенный сервер прослушивает HTTP-запросы через порт 8080.

Сервлеты, фильтры и слушатели

При использовании встроенного контейнера сервлетов вы можете зарегистрировать сервлеты, фильтры и всех прослушивателей (таких как HttpSessionListener) из спецификации Servlet либо с помощью bean-компонентов Spring, либо путем сканирования компонентов Servlet.

Регистрация сервлетов, фильтров и слушателей в виде Spring Beans

Любой экземпляр Servlet, Filter или servlet *Listener, являющийся компонентом Spring, регистрируется во встроенном контейнере. Это может быть особенно удобно, если вы хотите ссылаться на значение из вашего application.properties во время настройки.

По умолчанию, если контекст содержит только один сервлет, он сопоставляется с /. В случае нескольких bean-компонентов сервлета имя bean-компонента используется в качестве префикса пути. Фильтры сопоставляются с /*.

Если основанное на соглашении сопоставление недостаточно гибкое, вы можете использовать классы ServletRegistrationBean, FilterRegistrationBean и ServletListenerRegistrationBean для полного контроля.

Обычно безопасно оставлять Filter beans неупорядоченными. Если требуется определенный порядок, вы должны аннотировать Filter с помощью @Order или сделать так, чтобы он реализовал Ordered. Вы не можете настроить порядок фильтра, аннотируя метод его компонента с помощью @Order. Если вы не можете изменить класс Filter для добавления @Order или реализовать Ordered, вы должны определить FilterRegistrationBean для фильтра и установить порядок bean-компонента регистрации с помощью метода setOrder(int). Избегайте настройки фильтра, который считывает тело запроса по адресу Ordered.HIGHEST_PRECEDENCE, поскольку он может идти вразрез с конфигурацией кодировки символов вашего приложения. Если фильтр сервлетов оборачивает запрос, он должен быть настроен с порядком, который меньше или равен OrderedFilter.REQUEST_WRAPPER_FILTER_MAX_ORDER.

Чтобы увидеть порядок каждого фильтра в вашем приложении, включите ведение журнала уровня отладки для группы веб-журналов (logging.level.web=debug). Подробная информация о зарегистрированных фильтрах, включая их порядок и шаблоны URL, будет записана при запуске.

Будьте внимательны при регистрации bean-компонентов Filter, поскольку они инициализируются очень рано в жизненном стиле приложения. Если вам нужно зарегистрировать фильтр, взаимодействующий с другими компонентами, рассмотрите возможность использования DelegatingFilterProxyRegistrationBean.


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


Комментарии

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

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

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

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