В чем разница между использованием сервлет-фильтра и прослушивателя контекста сервлета?В чем разница между сервлет-фильтром и слушателем контекста сервлета?
Когда вы будете использовать его или нет?
В чем разница между использованием сервлет-фильтра и прослушивателя контекста сервлета?В чем разница между сервлет-фильтром и слушателем контекста сервлета?
Когда вы будете использовать его или нет?
A Filter
перехватывает HTTP-запросы, соответствующие шаблону URL-адреса, и позволяет изменять их. См также свою javadoc:
Фильтр является объектом, который выполняет задачи фильтрации либо по запросу к ресурсу (сервлет или статического контента), или на ответ от ресурса, или обоих.
Фильтры выполняют фильтрацию в методе
doFilter
. КаждыйFilter
имеет доступ к объектуFilterConfig
, из которого он может получить свои параметры инициализации, и ссылку наServletContext
, которую он может использовать, например, для загрузки ресурсов, необходимых для фильтрации задач.Фильтры настроены в дескрипторе развертывания веб-приложения.
Примеры, которые были определены для этой конструкции являются:
- Authentication Фильтры
- Протоколирование и аудит Фильтры
- преобразования изображения Фильтры
- сжатия данных Фильтры
- Шифрование Фильтры
- Tokenizing Фильтры
- фильтров, которые вызывают событие доступа к ресурсам
- XSL/T фильтрам
- Mime-тип цепи фильтр
А ServletContextListener
перехватывает при запуске WebAPP и завершении работы и позволяет выполнить код при запуске и/или неисправность. Смотрите также свою javadoc:
интерфейс для приема событий уведомления об изменениях
ServletContext
жизненного цикла.Для того, чтобы получить эти уведомления события, класс реализации должен быть либо объявлен в дескрипторе развертывания веб-приложении, с аннотацией
WebListener
или зарегистрирован через один изaddListener
методов, определенных наServletContext
.Реализации этого интерфейса вызываются по методу
contextInitialized(javax.servlet.ServletContextEvent)
в том порядке, в котором они были объявлены, и в их методеcontextDestroyed(javax.servlet.ServletContextEvent)
в обратном порядке.
Когда использовать тот или иной должен теперь быть очевиден. Используйте Filter
, если вы хотите перехватить HTTP-запросы, обрабатывая определенный шаблон URL, потому что вы хотите проверить/изменить HTTP-запрос/ответ. Используйте ServletContextListener
, если вы хотите перехватить запуск и/или завершение работы webapp.
Пожалуйста, узнайте, где найти javadocs и как их интерпретировать. Они содержат ответы на все тривиальные вопросы.
Вы предоставили гораздо более полезную информацию, чем в java-документах. Так что спасибо. – BestPractices