Middle
56
questionbank

Что вы знаете о сервлетных фильтрах?

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

Сервлетные фильтры позволяют перехватывать и обрабатывать входящие запросы и исходящие ответы в веб-приложении до того, как они достигнут сервлета, и после того, как сервлет завершит обработку. Они используются для общей логики, такой как аутентификация, логирование, сжатие данных или изменение содержимого запроса/ответа.

Фильтры реализуют интерфейс javax.servlet.Filter и имеют три основных метода:

  1. init(FilterConfig filterConfig): Вызывается один раз при инициализации фильтра. Используется для настройки.
  2. doFilter(ServletRequest request, ServletResponse response, FilterChain chain): Основной метод, выполняющий логику фильтра. Параметр FilterChain позволяет передать запрос/ответ следующему фильтру в цепочке или конечному сервлету с помощью метода chain.doFilter().
  3. destroy(): Вызывается один раз перед уничтожением фильтра. Используется для очистки ресурсов.

Конфигурирование фильтров осуществляется либо через web.xml, либо с помощью аннотации @WebFilter (начиная с Servlet 3.0).

Пример из web.xml:

xml

Пример с аннотацией:

java

Цепочка фильтров (FilterChain) позволяет последовательно применять несколько фильтров к одному запросу/ответу. Порядок выполнения фильтров определяется в web.xml или с помощью атрибутов аннотаций.

Отличия от Interceptors в Spring/Java EE:

  • Сервлетные фильтры работают на уровне контейнера сервлетов и веб-архитектуры.
  • Interceptors (например, CDI Interceptors или Spring MVC Interceptors) работают на более высоком уровне абстракции (компоненты, методы или контроллеры).

Фильтры являются мощным средством для реализации кросс-функциональной логики, которая должна быть применена ко многим запросам или ответам в веб-приложении без ее дублирования в каждом сервлете.