In Servlet gibt es Filter- und Listener-Funktionen. Ich möchte den genauen Unterschied zwischen Filter und Listener kennen.
75
In Servlet gibt es Filter- und Listener-Funktionen. Ich möchte den genauen Unterschied zwischen Filter und Listener kennen.
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 sind
javax.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
quelle
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.
quelle
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 })
quelle
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.
quelle
Nachdem ich alle Antworten und Blogs gelesen hatte, bekam ich Folgendes
Weitere Informationen zum Filter finden Sie unter http://array151.com/blog/servlet-filter/.
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/
quelle
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
quelle
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).
quelle
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.
quelle
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.
quelle