In Servlet gibt es Filter- und Listener-Funktionen. Ich möchte den genauen Unterschied zwischen Filter und Listener kennen.
Antworten:
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
.
ServletRequestListener
Hört zu, ServletRequestEvent
welches 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?
No WebApplicationContext found: no ContextLoaderListener registered?
wenn ich in meiner Spring-Anwendung keinen Listener definiere.
Filter werden für Anforderungen vor und nach dem Prozess verwendet. Schauen Sie sich das javax.servlet.Filter
in 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
ServletRequestListener
einen Filter verwenden?
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.
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.
Zuordnung filtert Dispatcher-Typen . Der Link ist etwas veraltet - er enthält nicht den Servlet 3.0- Async
Dispatcher-Typ. Mit der @WebFilter
Anmerkung 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 })
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.
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/
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
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).