2011-01-18 4 views

ответ

63

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

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

+0

И не стоит ничего, что слушатели реализуют javax.servlet.ServletContextListener, а фильтры реализуют javax.servlet.Filter – dade

+0

Можете ли вы рассказать мне об этом? 'ServletRequestListener' слушает' ServletRequestEvent', который является событием, инициированным для каждого входящего запроса. Если я хочу регистрировать пользовательский агент для каждого запроса в своем веб-приложении, должен ли я использовать этот прослушиватель или фильтр? – arun

+1

@BalusC Определяет слушателя является обязательным? Это дает мне ошибку «Нет WebApplicationContext: no ContextLoaderListener зарегистрирован?», Если я не определяю слушателя в приложении Spring. –

2

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

31

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

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

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

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

Этот материал из Oracle должен иметь возможность уточнить некоторые более Filters and Listeners

HTH

+1

Так что, если кто-то хочет войти что-то о каждом запросе, следует использовать один 'ServletRequestListener' или фильтр? – arun

+0

@arun Filter будет правильным выбором. – Ayusman

+1

@Ayusman Возможно, для этого утверждения необходимо обоснование – fnt

4

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

Источник: web

10

Текст из Java EE 6

Фильтр

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

Слушатели

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

19

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

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

2

Фильтр: Фильтр просто фильтрует ответ и запрашивает от клиентов до сервлета.

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

0

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

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

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

17

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

Listeners vs Filters

Mapping filters dispatcher types. Ссылка немного устарела - она ​​не включает диспетчер сервлетов 3.0 Async. Можно также указать диспетчерских типы с @WebFilter аннотацию:

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

@WebFilter(servletNames = { "My Servlet" }, 
    dispatcherTypes = { DispatcherType.REQUEST, DispatcherType.FORWARD }) 
3

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

Фильтр

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

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

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

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

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

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

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

Более подробную информацию о фильтре http://array151.com/blog/servlet-filter/

Слушатель

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

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

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

Более подробно: http://array151.com/blog/servlet-listener/

и здесь разница http://array151.com/blog/difference-between-servlet-filter-and-servlet-listener/

Смежные вопросы