Unterschied zwischen Filter und Listener im Servlet (Java EE)

Lesezeit: 6 Minuten

Benutzer-Avatar
kandarp

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

Benutzer-Avatar
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.xmlzum 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 an ServletRequestEvent 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


Benutzer-Avatar
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

Benutzer-Avatar
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.

Benutzer-Avatar
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.

Zuhörer vs. Filter

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.

Benutzer-Avatar
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/

Benutzer-Avatar
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

1220770cookie-checkUnterschied zwischen Filter und Listener im Servlet (Java EE)

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy