Es gibt Filter- und Listener-Funktionen im Servlet. Ich möchte den genauen Unterschied zwischen Filter und Listener wissen.
Unterschied zwischen Filter und Listener im Servlet (Java EE)
kandarp
Toter Programmierer
Der Servlet-Filter wird zum Überwachen von Anfragen und Antworten vom Client an das Servlet oder zum Ändern der Anfrage und Antworten oder zum Auditieren und Protokollieren verwendet.
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, in denen Sie einen Listener konfigurieren können web.xml
zum Beispiel HttpSessionListener
.
-
Und es ist auch nichts wert, dass Listener javax.servlet.ServletContextListener implementieren, während Filter javax.servlet.Filter implementieren
– Papa
20. Oktober 2013 um 20:43 Uhr
-
Können Sie das bitte für mich klären?
ServletRequestListener
hört sich anServletRequestEvent
Dies ist ein Ereignis, das für jede eingehende Anfrage ausgelöst wird. Wenn ich den User-Agent für jede Anfrage an meine Web-App protokollieren möchte, sollte ich diesen Listener oder einen Filter verwenden?– arun
23. August 2014 um 20:10 Uhr
-
@BalusC Ist das Definieren eines Listeners obligatorisch? Es gibt mir Fehler
No WebApplicationContext found: no ContextLoaderListener registered?
wenn ich in meiner Spring-Anwendung keinen Listener definiere.– Halbblutprinz
12. Juni 2016 um 15:04 Uhr
-
hmm, ich verstehe nicht wirklich, warum Sie hören müssen, wann eine Sitzung erstellt wird, oder darauf, wann ein Attribut in einer Sitzung erstellt wird. Können Sie ein Beispiel dafür geben, wann Sie einen Listener in von Ihnen entwickelten Anwendungen verwendet haben?
– Jonathan Laliberte
2. November 2018 um 11:30 Uhr
Ayusman
Filter werden für Vor- und Nachbearbeitungsanfragen 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änderungen, Attributänderungen usw. verfolgen. Die implementierten Schnittstellen sind javax.servlet.Listener
Schnittstelle.
Lassen Sie mich basierend auf den Antworten von @fnt unten versuchen, etwas mehr zu klären. Listener werden auf Lebenszyklusänderungen ausgerichtet, ohne dass eine Clientanforderung eingehen muss. Für eine Clientanforderung können also viele weitere Lebenszyklusereignisse eintreten, bevor die Anforderung verworfen wird. Beispiel: Sie möchten alle Sitzungen mit Timeout protokollieren. Bitte beachten Sie, dass SesionTimeout ein Lebenszyklusereignis ist, das eintreten kann, ohne dass der Benutzer etwas tun muss. Für ein solches Szenario ist ein Listener angemessen.
Zur Frage der Protokollierung, wenn eine Anfrage eintrifft. Es gibt keine direkte Zuordnung einer neuen Anforderung zu einem entsprechenden Listener-Ereignis (Leselebenszyklusereignis). Und daher ist Filter meiner Meinung nach für jede eingehende Anfrage, wenn Sie etwas protokollieren möchten, das Richtige.
Dieses Material von Oracle sollte in der Lage sein, etwas mehr zu klären
Filter und Listener
Aktualisierung 17. März 2021
In den Kommentaren gab es einiges hin und her. Versuch zu klären. Per Definition wird ein Filter immer aufgerufen. Wenn ich also die Anfrage IMMER protokollieren muss, wird durch das Aufbewahren in Filtern sichergestellt, dass ich die Protokollierung erhalte. Wenn ich es in Listener einfüge, muss ich sicherstellen, dass der Protokollierungscodeblock in ALLEN möglichen Listenern ausgeführt wird. Mit beiden Ansätzen erhalten Sie die Protokollierung, die Sie benötigen, die Verwendung von Filtern ist effizienter.
HTH
-
Wenn man also zu jeder Anfrage etwas protokollieren will, sollte man das verwenden
ServletRequestListener
oder Filter?– arun
23. August 2014 um 20:14 Uhr
-
@Ayusman Wahrscheinlich ist für diese Aussage eine Begründung erforderlich
– ᄂ ᄀ
27. März 2015 um 15:01 Uhr
-
@fnt, da arun um Protokollierung auf Anforderungsbasis gebeten hat, denke ich, dass Filter die Rechnung erfüllen wird.
– Ajusman
27. März 2015 um 17:34 Uhr
-
@Ayusman Sie haben immer noch nicht erklärt, warum Filter bevorzugt werden sollten. Mit Request Listener kann man das gleiche erreichen.
– ᄂ ᄀ
27. März 2015 um 17:45 Uhr
-
@fnt sehr guter Punkt, in meinen bisherigen Erfahrungen habe ich Filter für die Protokollierung verwendet. Wieso den? Ich denke, Konvention mehr als alles andere. Listener können jedoch auch für diese Aufgabe verwendet werden.
– Mukul Tripathi
17. August 2016 um 20:53 Uhr
Muhammad Younus Attari
Filter ist wie ein Wasserfilter, bei dem eingehende (Request) und ausgehende (Response) Werte gefiltert werden.
Hörer ist wie Zuhören (Trigger) – wann immer es erforderlich ist, werde ich ausgeführt.
Wsewolod Golowanow
Ein wichtiger Unterschied wird oft übersehen: Während Listener für eine tatsächliche physische Anfrage ausgelöst werden, funktionieren Filter mit Servlet-Container-Dispatches. Für einen Listener-Aufruf kann es mehrere Filter/Servlet-Aufrufe geben.
Sie können Dispatcher-Typen mit angeben @WebFilter
Anmerkung:
import javax.servlet.DispatcherType;
import javax.servlet.annotation.WebFilter;
@WebFilter(servletNames = { "My Servlet" },
dispatcherTypes = { DispatcherType.REQUEST, DispatcherType.FORWARD })
Sehen Java EE 7-Tutorial: Filtern von Anfragen und Antworten Weitere Informationen zu Filtern.
Wenn Sie immer noch Probleme haben, Filter zu verstehen, lesen Sie weiter Zuordnungsfilter-Dispatcher-Typen – Dies ist ein älteres J2EE-Dokument, aber es geht mehr ins Detail.
KV Prajapati
Text aus Java EE 6
Filter
Filter ist ein Objekt, das Anfrage und Antwort (Header sowie Inhalt) umwandelt.
Zuhörer
Sie können Ereignisse im Lebenszyklus eines Servlets überwachen und darauf reagieren, indem Sie Listener-Objekte definieren, deren Methoden aufgerufen werden, wenn Lebenszyklusereignisse auftreten.
Nachdem ich alle Antworten und Blogs gelesen habe, habe ich das bekommen
Filter
Ein Filter ist ein Objekt, das Anforderungen und Antworten dynamisch abfängt, um die in den Anforderungen oder Antworten enthaltenen Informationen umzuwandeln oder zu verwenden.
Filter erzeugen in der Regel selbst keine Antworten, sondern bieten stattdessen 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 der vom Controller gerenderten Antwort ausgeführt.
Ein Filter wird im Web-Layer nur so verwendet, wie er in web.xml definiert ist.
Filter sind besser geeignet, wenn Sie Ihre Anfrage/Antwort als Blackbox-System behandeln. Sie funktionieren unabhängig davon, wie das Servlet implementiert ist.
Filter werden verwendet, um Filteraufgaben wie Anmeldeauthentifizierung, Prüfung eingehender Anfragen von Webseiten, Konvertierung, Protokollierung, Komprimierung, Verschlüsselung und Entschlüsselung, Eingabevalidierung usw. durchzuführen.
Ein Servlet-Filter wird nur in der Webschicht verwendet, Sie können ihn nicht außerhalb eines Webkontexts verwenden.
Weitere Einzelheiten zum Filter 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 B. HttpSessionListener.
Listener werden für eine tatsächliche physische Anfrage 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 mehr Details: http://array151.com/blog/servlet-listener/
und hier ist der unterschied http://array151.com/blog/difference-between-servlet-filter-and-servlet-listener/
Clyde Lobo
Während Sie das aktuelle Ereignisobjekt innerhalb eines Listeners ändern können, können Sie die Ausführung des aktuellen Ereignishandlers in einem Listener nicht anhalten. Sie können die Ereigniswarteschlange auch nicht innerhalb eines Listeners löschen. Abgesehen von den auferlegten Unterschieden in den Fähigkeiten sind sie auch für unterschiedliche Zwecke bestimmt. Listener konzentrieren sich in der Regel auf die Interaktion zwischen dem Event-Handler und dem Modell, während Filter sich eher auf die Interaktion zwischen dem Event-Handler und dem Controller konzentrieren.
Quelle : Netz