Разница между фильтром и слушателем в сервлете (Java EE) - PullRequest
70 голосов
/ 18 января 2011

В Сервлете есть функция Фильтры и Слушатели. Я хочу знать точную разницу между Filter и Listener.

Ответы [ 10 ]

75 голосов
/ 18 января 2011

Servlet Filter используется для мониторинга запросов и ответов от клиента к сервлету, или для изменения запроса и ответа, или для аудита и регистрации.

Servlet Listener используется для прослушивания событий в веб-контейнерахНапример, когда вы создаете сеанс или помещаете атрибут в сеанс или если вы пассивируете и активируете в другом контейнере, чтобы подписаться на эти события, вы можете настроить прослушиватель в web.xml, например HttpSessionListener.

34 голосов
/ 18 января 2011

Фильтры используются для запросов до и после обработки.Посмотрите на javax.servlet.Filter в вашем javadoc контейнера tomcat / jboss / other.

Где слушатели похожи на триггеры, которые могут быть присоединены к событиям на вашем сервере приложений (давайте используем здесь термин контейнер).С помощью слушателей вы можете отслеживать изменения уровня приложения, уровня сеанса, изменения жизненного цикла, изменения атрибутов и т. Д. Реализованные интерфейсы: javax.servlet.Listener interface.

Основываясь на ответах @fnt ниже, позвольте мне попробоватьуточнить еще немного.Слушатели нацелены на изменения жизненного цикла, без необходимости получения запроса клиента. Таким образом, для одного запроса клиента может произойти намного больше событий жизненного цикла, прежде чем запрос будет удален.Пример: вы хотите регистрировать все сеансы, которые были прерваны.Обратите внимание, что SesionTimeout - это событие жизненного цикла, которое может происходить, если пользователь ничего не сделает.Для такого сценария подойдет слушатель.

К вопросу о регистрации при поступлении запроса.Нет прямого сопоставления нового запроса с эквивалентным событием слушателя (событие чтения жизненного цикла).И, следовательно, для каждого входящего запроса, если вы хотите что-то зарегистрировать, фильтр, по моему мнению, является правильным выбором.

Этот материал от Oracle должен быть в состоянии уточнить еще Фильтры и слушатели

HTH

21 голосов
/ 11 июня 2012

Фильтр подобен водяному фильтру, где будут фильтроваться входящие (запрос) и исходящие (ответ) значения.

Слушатель похож на прослушивание (триггер) - при необходимости я буду исполняться.

20 голосов
/ 25 ноября 2014

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

Listeners vs Filters

Отображение фильтров типов диспетчера . Ссылка немного устарела - она ​​не включает тип диспетчера Servlet 3.0 Async. Можно также указать типы диспетчера с аннотацией @WebFilter:

import javax.servlet.DispatcherType;
import javax.servlet.annotation.WebFilter;

@WebFilter(servletNames = { "My Servlet" },
    dispatcherTypes = { DispatcherType.REQUEST, DispatcherType.FORWARD })
10 голосов
/ 18 января 2011

Текст из Java EE 6

Фильтр

Фильтр - это объект, который преобразует запрос и ответ (как заголовок, так и содержимое).

Слушателей

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

6 голосов
/ 08 декабря 2016

После прочтения всех ответов и блогов вот что я получил

Фильтр

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

Фильтры, как правило, сами не создают ответы, а вместо этого обеспечить универсальные функции, которые могут быть «прикреплены» к любому типу страница сервлета или JSP.

Фильтр запускается перед представлением рендеринга, но после рендеринга контроллера ответ.

Фильтр используется в веб-слое только так, как он определен в web.xml.

Фильтры больше подходят для обработки вашего запроса / ответа как система черного ящика. Они будут работать независимо от того, как сервлет реализован.

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

Фильтр сервлета используется только в веб-слое, его нельзя использовать вне веб-контекста.

Подробнее о фильтре http://array151.com/blog/servlet-filter/

Слушатель

Servlet Listener используется для прослушивания событий в веб-контейнере, например, когда вы создаете сеанс или помещаете атрибут в сеанс или если вы пассивируете и активируете в другом контейнере, чтобы подписаться на эти события вы можете настроить слушателя в web.xml, например, HttpSessionListener.

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

Вы можете отслеживать и реагировать на события в жизненном цикле сервлета с помощью определение объектов слушателя, чьи методы вызываются при жизненном цикле происходят события.

Для более подробной информации: http://array151.com/blog/servlet-listener/

а вот и разница http://array151.com/blog/difference-between-servlet-filter-and-servlet-listener/

4 голосов
/ 18 января 2011

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

Источник: Интернет

2 голосов
/ 15 сентября 2012

Фильтр: Фильтр просто фильтрует ответы и запросы, поступающие от клиентов к сервлету.

Слушатель: похож на триггер, когда происходит любой триггер, он выполняет действие.

2 голосов
/ 18 января 2011

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

1 голос
/ 29 октября 2013

Короче говоря,

Фильтр для сервлета, перехватывает запросы и ответы.

Слушатель предназначен для веб-приложения, выполняющего важные задачи для событий на уровне контекста, на уровне сеанса и т. Д.

...