Unterschied zwischen Filter und Listener im Servlet (Java EE)


Antworten:


82

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

Servlet Listener für das Hören von Ereignissen in einem Web - Container verwendet werden, wie wenn Sie eine Sitzung zu erstellen, oder ein Attribut in einer Sitzung stellen oder wenn Sie passivieren und in einem anderen Container aktivieren, um diese Ereignisse zu abonnieren können Sie konfigurieren Zuhörer in web.xml, für Beispiel HttpSessionListener.


2
Und es ist auch nichts wert, dass Listener javax.servlet.ServletContextListener implementieren, während Filter javax.servlet.Filter implementieren
dade

Können Sie mir das bitte erklären? ServletRequestListenerHört zu, ServletRequestEventwelches Ereignis für jede eingehende Anforderung ausgelöst wird. Wenn ich den Benutzeragenten für jede Anforderung in meiner Web-App protokollieren möchte, sollte ich diesen Listener oder einen Filter verwenden?
Arun

1
@BalusC Ist die Definition eines Listeners obligatorisch? Es gibt mir eine Fehlermeldung, No WebApplicationContext found: no ContextLoaderListener registered?wenn ich in meiner Spring-Anwendung keinen Listener definiere.
Halbblutprinz

hmm, ich verstehe nicht wirklich, warum Sie beim Erstellen einer Sitzung oder beim Erstellen eines Attributs in einer Sitzung auf etwas achten müssen. Können Sie ein Beispiel geben, wann Sie in von Ihnen entwickelten Anwendungen einen Listener verwendet haben?
Jonathan Laliberte

35

Filter werden für Anforderungen vor und nach dem Prozess verwendet. Schauen Sie sich das javax.servlet.Filterin Ihrem Kater / JBoss / anderen Container Javadoc an.

Wo 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 sindjavax.servlet.Listener Schnittstellen.

Lassen Sie mich anhand der folgenden Antworten von @fnt versuchen, weitere Erläuterungen zu geben. Listener sind auf Änderungen des Lebenszyklus ausgerichtet, ohne dass eine Clientanforderung eingehen muss. Bei einer Clientanforderung können daher möglicherweise viele weitere Lebenszyklusereignisse auftreten, bevor die Anforderung entsorgt wird. Beispiel: Sie möchten alle Sitzungen dieses Zeitlimits protokollieren. Bitte beachten Sie, dass SesionTimeout ein Lebenszyklusereignis ist, das auftreten kann, ohne dass der Benutzer etwas tun muss. Für ein solches Szenario ist ein Listener geeignet.

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

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

HTH


1
Wenn man also über jede Anfrage etwas protokollieren möchte, sollte man ServletRequestListenereinen Filter verwenden?
Arun

1
@ Ayusman Wahrscheinlich ist eine Begründung für diese Aussage erforderlich
ᄂ ᄀ

@fnt da arun nach Protokollierung auf Anfragebasis gefragt hat, denke ich, dass der Filter in die Rechnung passt.
Ayusman

1
@ Ayusman Du hast immer noch nicht erklärt, warum Filter bevorzugt werden sollten. Mit Request Listener kann man das auch erreichen.
27 ᄀ

1
@fnt sehr guter Punkt, in meinen vergangenen Erfahrungen habe ich Filter für die Protokollierung verwendet. Warum? Ich denke Konvention mehr als alles andere. Listener können jedoch auch für diese Aufgabe verwendet werden.
Mukul Tripathi

23

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

Zuhörer ist wie Zuhören (Auslöser) - wann immer es erforderlich ist, werde ich aufgeführt.


21

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

Zuhörer gegen Filter

Zuordnung filtert Dispatcher-Typen . Der Link ist etwas veraltet - er enthält nicht den Servlet 3.0- AsyncDispatcher-Typ. Mit der @WebFilterAnmerkung können auch Dispatcher-Typen angegeben werden :

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

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

11

Text aus Java EE 6

Filter

Filter ist ein Objekt, das die Anforderung 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 beim Auftreten von Lebenszyklusereignissen aufgerufen werden.


8

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

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 erstellen normalerweise selbst keine Antworten, sondern bieten universelle Funktionen, die an jede Art von Servlet oder JSP-Seite "angehängt" werden können.

Der Filter wird vor dem Rendern der Ansicht, aber nach dem Rendern der Antwort des Controllers ausgeführt.

Ein Filter wird nur in der Webebene verwendet, wie sie in der Datei 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, Verschlüsselung 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 zum Filter finden Sie unter http://array151.com/blog/servlet-filter/.

Hörer

Der Servlet-Listener wird zum Abhören von Ereignissen in einem Webcontainer verwendet, z. B. wenn Sie eine Sitzung erstellen oder ein Attribut in einer Sitzung platzieren oder wenn Sie in einem anderen Container passivieren und aktivieren, um diese Ereignisse zu abonnieren, können Sie den Listener in web.xml konfigurieren Zum 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änderungen, Attributänderungen usw. verfolgen.

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

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/


4

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 heraus löschen. Neben den auferlegten Unterschieden in den Fähigkeiten sind sie auch für verschiedene Zwecke gedacht. Listener konzentrieren sich in der Regel auf die Interaktion zwischen dem Ereignishandler und dem Modell, während sich Filter auf die Interaktion zwischen dem Ereignishandler und dem Controller konzentrieren.

Quelle: Web


4

Sie können leicht eine grobe Vorstellung von der englischen Bedeutung dieser beiden haben. Filter dient zum Filtern des Inhalts / der Ressource, die von einem Servlet zu / von einem Servlet ausgehen. Auf der anderen Seite ist Listener da, um einige verwandte Dinge zu tun, wenn etwas mit der Webanwendung passiert (Abhören).


2

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

Listener: Ist wie ein Auslöser, wenn ein Auslöser auftritt, der die Aktion ausführt.


1

Zusamenfassend,

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

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.