wake-up-neo.net

Unterschied zwischen Filter und Listener in Servlet (Java EE)

Es gibt Filter- und Listener-Funktionen in Servlet. Ich möchte den genauen Unterschied zwischen Filter und Listener kennen.

71
kandarp

Der Servlet-Filter wird zum Überwachen der Anforderung und Antwort des Clients an das Servlet oder zum Ändern der Anforderung und Antwort oder zum Überwachen und Protokollieren verwendet.

Servlet-Listener wird zum Abhören von Ereignissen in einem Webcontainer verwendet, z. B. beim Erstellen einer Sitzung oder beim Platzieren eines Attributs in einer Sitzung. Wenn Sie diese Ereignisse in einem anderen Container passivieren und aktivieren, können Sie den Listener in _web.xml_, zum Beispiel HttpSessionListener.

76
Dead Programmer

Filter werden für Anforderungen vor und nach dem Prozess verwendet. Schaue auf die javax.servlet.Filter in Ihrem Tomcat/jboss/other container javadoc.

Wobei die Listener wie Trigger sind, die an Ereignisse in Ihrem App-Server angehängt werden können (verwenden wir hier den Begriff Container). Mit Listenern können Sie Änderungen auf Anwendungsebene, Sitzungsebene, Lebenszyklus, Attributänderungen usw. verfolgen. Die implementierten Schnittstellen sind javax.servlet.Listener Schnittstelle.

Lassen Sie mich anhand der unten stehenden Antworten von @fnt versuchen, weitere Fragen zu klären. Listener sind auf Änderungen im Lebenszyklus ausgerichtet, ohne dass eine Clientanforderung eingehen muss. Bei einer Clientanforderung können daher möglicherweise noch viele weitere Lebenszyklusereignisse auftreten, bevor die Anforderung verworfen wird. Beispiel: Sie möchten alle Sitzungen protokollieren, für die das Zeitlimit überschritten wurde. Bitte beachten Sie, dass es sich bei SesionTimeout um ein Lebenszyklusereignis handelt, bei dem der Benutzer nichts unternehmen muss. Für ein solches Szenario ist ein Listener geeignet.

Auf die Frage der Protokollierung, wenn eine Anfrage eingeht. Es gibt keine direkte Zuordnung einer neuen Anforderung zu einem entsprechenden Listener-Ereignis (Read Lifecycle Event). Und damit für jede eingehende Anfrage, wenn Sie etwas protokollieren möchten, ist Filter meiner Meinung nach das Richtige.

Dieses Material von Oracle sollte in der Lage sein, etwas mehr zu klären Filter und Listener

HTH

34
Ayusman

Filter ist wie ein Wasserfilter, bei dem eingehende (Anfrage) und ausgehende (Antwort) Werte gefiltert werden.

Listener ist wie Zuhören (Trigger) - wann immer erforderlich, werde ich aufgeführt.

Ein wichtiger Unterschied wird häufig übersehen: Während Listener für eine tatsächliche physische Anforderung ausgelöst werden, funktionieren Filter bei Servlet-Container-Dispatches. Für einen Listener-Aufruf können mehrere Filter-/Servlet-Aufrufe vorhanden sein.

Listeners vs Filters

Dispatcher-Typen für Zuordnungsfilter . Der Link ist etwas veraltet - er enthält nicht den Dispatcher-Typ Servlet 3.0 Async. Man kann Dispatcher-Typen auch mit dem @WebFilter Anmerkung:

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

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

Text aus Java EE 6

Filter

Filter ist ein Objekt, das Anfrage und Antwort (Header sowie Inhalt) transformiert.

Zuhörer

Sie können Ereignisse im Lebenszyklus eines Servlets überwachen und darauf reagieren, indem Sie Listener-Objekte definieren, deren Methoden aufgerufen werden, wenn Ereignisse im Lebenszyklus auftreten.

11
adatapost

Nachdem ich alle Antworten und Blogs gelesen hatte, bekam ich das

Filter

Ein Filter ist ein Objekt, das Anforderungen und Antworten dynamisch abfängt, um die in den Anforderungen oder Antworten enthaltenen Informationen zu transformieren oder zu verwenden.

Filter erzeugen normalerweise selbst keine Antworten, sondern stellen universelle Funktionen bereit, die an jeden Servlet- oder JSP-Seitentyp "angehängt" werden können.

Der Filter wird vor dem Rendern der Ansicht ausgeführt, jedoch nach der vom Controller gerenderten Antwort.

Ein Filter wird in der Webebene nur so verwendet, wie er in web.xml definiert ist.

Filter eignen sich besser, wenn Sie Ihre Anfrage/Antwort als Black-Box-System behandeln. Sie funktionieren unabhängig davon, wie das Servlet implementiert ist.

Filter werden verwendet, um Filteraufgaben wie Anmeldeauthentifizierung, Prüfung eingehender Anforderungen von Webseiten, Konvertierung, Protokollierung, Komprimierung, Ver- und Entschlüsselung, Eingabevalidierung usw. auszuführen.

Ein Servlet-Filter wird nur in der Webebene verwendet. Sie können ihn nicht außerhalb eines Webkontexts verwenden.

Weitere Informationen zu filter http://array151.com/blog/servlet-filter/

Zuhörer

Servlet-Listener wird zum Abhören von Ereignissen in einem Webcontainer verwendet, z. B. wenn Sie eine Sitzung erstellen oder ein Attribut in eine Sitzung einfügen oder wenn Sie in einem anderen Container passivieren und aktivieren, um diese Ereignisse zu abonnieren. Sie können den Listener in web.xml konfigurieren Beispiel: HttpSessionListener.

Listener werden für eine tatsächliche physische Anforderung ausgelöst, die an Ereignisse in Ihrem App-Server angehängt werden kann. Mit Listenern können Sie Änderungen auf Anwendungsebene, Sitzungsebene, Lebenszyklus, Attributänderungen usw. verfolgen.

Sie können Ereignisse im Lebenszyklus eines Servlets überwachen und darauf reagieren, indem Sie Listener-Objekte definieren, deren Methoden aufgerufen werden, wenn Lebenszyklusereignisse auftreten.

Für weitere Informationen: http://array151.com/blog/servlet-listener/

und hier ist der Unterschied http://array151.com/blog/difference-between-servlet-filter-and-servlet-listener/

7
Sunil Garg

Während Sie das aktuelle Ereignisobjekt in einem Listener ändern können, können Sie die Ausführung des aktuellen Ereignishandlers in einem Listener nicht anhalten. Sie können die Ereigniswarteschlange auch nicht aus einem Listener löschen. Neben den auferlegten Leistungsunterschieden sind sie auch für unterschiedliche Zwecke bestimmt. Listener konzentrieren sich in der Regel auf die Interaktion zwischen dem Ereignishandler und dem Modell, während Filter sich eher auf die Interaktion zwischen dem Ereignishandler und dem Controller konzentrieren.

Quelle: web

4
Clyde Lobo

Sie können leicht eine ungefähre Vorstellung von der englischen Bedeutung dieser beiden haben. Filter dient zum Filtern des Inhalts/der Ressource, der/die von einem Servlet kommt/ausgeht. Andererseits ist Listener da, um einige verwandte Dinge zu tun, wenn etwas mit der Webanwendung passiert (Listening).

3

Filter: Filter filtert einfach die Antwort und die Anforderung, die von den Clients an das Servlet gesendet werden.

Listener: Ist wie ein Trigger, wenn ein Trigger auftritt, der die Aktion ausführt.

2
geet

Zusamenfassend,

Filter ist für das Servlet und fängt die Anforderungen und Antworten ab.

Listener ist für die Webanwendung vorgesehen und erledigt wichtige Aufgaben für Ereignisse auf Kontext-, Sitzungsebene usw.

1
Mawia