1. Einführung in den Filter
Der Filter wird auch als Filter bezeichnet. Es ist die aufregendste Technologie in der Servlet -Technologie. Durch die Filtertechnologie fangen Webentwickler alle von Webservern verwalteten Webressourcen ab: wie JSP, Servlet, statische Bilddateien oder statische HTML -Dateien, wodurch einige spezielle Funktionen erzielt werden. Implementieren Sie beispielsweise einige erweiterte Funktionen wie URL-Ebene auf Berechtigungszugriffskontrolle, filtern sensitives Vokabular und Komprimierungsinformationen.
Die Servlet -API bietet eine Filterschnittstelle. Bei der Entwicklung von Webanwendungen wird die Java -Klasse als Filterfilter bezeichnet, wenn die geschriebene Java -Klasse diese Schnittstelle implementiert. Durch die Filtertechnologie können Entwickler die Zugriffsanforderungen und Antworten der Benutzer implementieren, bevor Sie auf eine Zielressource zugreifen, wie unten gezeigt:
2. Wie fällt der Filter ab?
Es gibt eine Dofiltermethode in der Filterschnittstelle. Wenn wir Filter schreiben und konfigurieren, welche Webressourcen abfangen sollen, ruft der Webserver jedes Mal die Dofilter -Methode des Filters auf, bevor er die Servicemethode der Webressource aufruft. Daher kann das Schreiben von Code in dieser Methode den folgenden Zweck erreichen:
1. Lassen Sie einen Code ausführen, bevor Sie die Zielressource aufrufen.
2. Ob Sie die Zielressource aufrufen möchten (dh, ob Benutzer auf die Webressource zugreifen können).
3. Nachdem Sie die Zielressource aufgerufen haben, lassen Sie einen Code ausführen.
Wenn der Webserver die Dofilter -Methode aufruft, wird ein Filterchain -Objekt eingelegt. Das Filterchain -Objekt ist das wichtigste Objekt in der Filterschnittstelle. Es bietet auch eine Dofilter -Methode. Entwickler können entscheiden, ob sie diese Methode entsprechend ihren Bedürfnissen bezeichnen sollen. Wenn diese Methode aufgerufen wird, ruft der Webserver die Servicemethode der Webressource auf, dh auf die Webressource wird zugegriffen, andernfalls wird auf die Webressource nicht zugegriffen.
3.. Erste Schritte mit der Filterentwicklung
3.1. Filterentwicklungsschritte
Die Filterentwicklung ist in zwei Schritte unterteilt:
1. Schreiben Sie eine Java -Klasse, um die Filterschnittstelle zu implementieren und ihre Dofilter -Methode zu implementieren.
2. Verwenden Sie die Elemente <Filter> und <Filtermapping> in der Datei web.xml, um die schriftliche Filterklasse zu registrieren und die Ressourcen festzulegen, die sie abfangen können.
Filterbeispiel:
package me.gacl.web.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.servletResponse;/*** @className: filterDemo*@Description: Drei typische Anwendungen des Filters:*, Sie können entscheiden, ob Sie Kettenketten anrufen. Die Zielressource wird ausgeführt, das Ausführungsergebnis der Zielressource kann erfasst werden, wodurch einige spezielle Funktionen erkennen* @Author: 小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小小 � Antwort, Filterchain -Kette) löscht IOException, ServleTException {// bitte einige Vorverarbeitungen auf Anfrage und Antwort aus request.setcharactercoding ("utf-"); reaktion.setcharactercoding ("utf-"); Antwort // die Zielressource ausführen und veröffentlichen system.out.println ("filterdemo nach der Ausführung!!!");}@Oversidepublic void desto Konfigurieren Sie Filter in web.xml:
<? xml Version = ".". coding = "utf-"?> <web-App Version = "." xmlns = "http://java.sun.com/xml/ns/javaee" xmlns: xsi = "http://www.w.org//xmlschema-instance" xsi: schemalocation = "http:/java.sun.sun.com/xml/ns/javae. http://java.sun.com/xml/ns/javaee/web-app__.xsd "> <display-name> </display-name> <willkommen-file-list> <Welcome-file> Index.jsp </Welcome-file> </Welcome-File-list> <!-Konfiguration Filter-> <Filter> <Filter-Name> Filterdemo </Filter-Name> <Filter-Klasse> me.gacl.web.filter.filterdemo </filterklasse> </Filter> <!-Zuordnungsfilter-> <filter-mapping> <filter-name> filterDemo </Filterdemo </agelter-name> </° C </° C </"," Filterdemo </"Filterdemo </" Filter All </"aveNdemo </" Filter All </"Filter All </" Filter All </"Filter All </", "Filterdemo" </"filterDemo </" Filter All </"," Filterdemo "</" filterDemo </"agr. Anforderungen-> <URL-Muster>/*</url-puster> </filter-mapping> </web-App>
3.2. Filterkette
In einer Webanwendung können mehrere Filter entwickelt und geschrieben werden, die zu einer Filterkette kombiniert werden.
Der Webserver entscheidet, welcher Filter zuerst gemäß der Reihenfolge, in der der Filter in der Datei web.xml registriert ist, anrufen soll. Wenn die Dofilter -Methode des ersten Filters aufgerufen wird, erstellt der Webserver ein Filterchain -Objekt, das die Filterkette darstellt und an die Methode übergibt. Wenn der Entwickler in der Dofilter -Methode die Dofilter -Methode des Filterchain -Objekts aufruft, prüft der Webserver, ob im Filterchain -Objekt noch ein Filter vorhanden ist. Wenn es vorhanden ist, wird der zweite Filter aufgerufen, und wenn es keine gibt, wird die Zielressource aufgerufen.
4. Der Lebenszyklus des Filters
4.1. Schaffung des Filters
Die Erstellung und Zerstörung des Filters liegt in der Verantwortung des Webservers. Wenn die Webanwendung gestartet wird, erstellt der Webserver ein Instanzobjekt von Filter und ruft seine Init -Methode auf, um die Initialisierungsfunktion des Objekts zu vervollständigen, wodurch sich auf die Abfangen für nachfolgende Benutzeranforderungen vorbereitet. Das Filterobjekt wird nur einmal erstellt und die Init -Methode wird nur einmal ausgeführt. Durch die Parameter der Init -Methode kann ein Filterconfig -Objekt, das die aktuellen Filterkonfigurationsinformationen darstellt, erhalten werden.
4.2. Zerstörung des Filters
Der Web -Container ruft die Zerstörungsmethode auf, um den Filter zu zerstören. Die Zerstörungsmethode wird nur einmal während des Lebenszyklus des Filters ausgeführt. Bei der Zerstörungsmethode können die vom Filter verwendeten Ressourcen befreit werden.
4.3. Filterconfig -Schnittstelle
Bei der Konfiguration von Filtern können Benutzer <init-param> verwenden, um einige Initialisierungsparameter für Filter zu konfigurieren. Wenn der Web -Container das Filterobjekt instanziiert und seine Init -Methode aufruft, wird das Filterconfig -Objekt, das die Filterinitialisierungsparameter verkörpert, übergeben. Wenn Entwickler Filter schreiben, können sie daher erhalten:
String getFiltername (): Holen Sie sich den Namen des Filters.
String GetInitParameter (String -Name): Gibt den Wert des Initialisierungsparameters mit dem in der Beschreibung der Bereitstellung angegebenen Namen zurück. Null zurückgeben, wenn es nicht existiert.
Aufzählung getInitParameternames (): Gibt einen Aufzählungssatz von Namen aller Initialisierungsparameter des Filters zurück.
public servletContext getServletContext (): Gibt einen Verweis auf das Servlet -Kontextobjekt zurück.
Beispiel: Verwenden Sie FilterConfig, um Filterkonfigurationsinformationen zu erhalten
Paket me.gacl.web.filter; import Java.io.ioxception; import Java.util.enumeration; import Javax.servlet.filter; import Javax.servlet.filterchain; importieren javax.servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet.Servlet. javax.servlet.servletResponse; öffentliche Klasse filterdemo implementiert filter {/* filterinitialisierung* @see javax.servlet.filter#init (javax.servlet.filterconfig)*/ @oversidepublic void init (Filterconfig). Initialization----");/*** <filter><filter-name>FilterDemo</filter-name><filter-class>me.gacl.web.filter.FilterDemo</filter-class><!--Configure initialization parameters of FilterDemo filter--><init-param><description>Configure initialization parameters of FilterDemo Filter </Beschreibung> <param-name> name </param-name> <param-value> gacl </param-value> </init-param> <init-p aram> <beschreibung> Konfigurieren Sie die Initialisierungsparameter von FilterDemo Filter </Beschreibung> <Param-name> ähnlich </param-name> <param-value> java </param-value> </init-param> </filter> <filter-mapping> <filter-name> filterdemo </filter-name> <! Holen Sie sich den Namen des Filters für Zeichenfolge filtername = filterconfig.getFiltername (); // Erhalten Sie den in der Web.xml -Datei String initparam = filterconfig.getInitParameter ("Name") konfigurierten Parameter für die Initialisierung ("Name"). String initparam = filterconfig.getInitParameter ("Like"); // Gibt einen Aufzählungssatz von Namen aller Initialisierungsparameter des Filters zurück. Enumeration <string> initparameternames = filterconfig.getInitParameternames (); System.out.println (Filtername); System.out.println (initparam); System.out.println (initparam); System.out.println (initparam); while (initparameternames.hasmoreElements ()) {String paramname = (string) initparameternames.nextElement (); System.out.println (Paramname);}}@oversidepublic void Dofilter (ServletRequest Request, ServletResponse -Antwort, Filterchain -Kette) Kette IOOExcept {System.out.println ("filterDemo vor der Ausführung !!!"); chain.dofilter (Anfrage, Antwort); // Die Zielressource wird ausgeführt und system.out.println ("filterdemo nach der Ausführung !!!");}@oversidepublic void desto 5. Filterbereitstellung
Der Einsatz von Filter ist in zwei Schritte unterteilt:
1. Registerfilter
2. Mapping -Filter
5.1. Registerfilter
Nach der Entwicklung des Filters müssen Sie sich in der Datei web.xml registrieren, damit Sie vom Webserver aufgerufen werden können.
Beispiel eines Filterbeispiels in Web.xml -Datei:
<filter><description>FilterDemo filter</description><filter-name>FilterDemo</filter-name><filter-class>me.gacl.web.filter.FilterDemo</filter-class><!--Configure initialization parameters of FilterDemo filter--><init-param><description>Configure initialization parameters of FilterDemo filter</desc ript> <param-name> name </param-name> <param-value> gacl </param-value> </init-param> <init-param> <beschreibung> Konfigurieren Sie die Initialisierungsparameter des FilterDemo-Filters </Beschreibung
<Bection> wird verwendet, um Beschreibungsinformationen hinzuzufügen. Der Inhalt dieses Elements kann leer sein und <beschreibung> kann nicht konfiguriert werden.
<filtername> wird verwendet, um einen Namen für den Filter anzugeben, und der Inhalt des Elements kann nicht leer sein.
Das Element <Filter-Klasse> wird verwendet, um den vollständigen qualifizierten Klassennamen des Filters anzugeben.
Das <init-param> Element wird verwendet, um die Initialisierungsparameter für den Filter anzugeben, und sein untergeordnetes Element <Param-name> gibt den Namen des Parameters an und <parameter> Gibt den Wert des Parameters an. Im Filter können auf die Initialisierungsparameter mit dem Filterconfig -Schnittstellenobjekt zugegriffen werden. Wenn der Filter keine Initialisierungsparameter angeben muss, ist das <init-param> -Element möglicherweise nicht konfiguriert.
5.2. Mapping -Filter
Nach dem Registrieren des Filters in der Datei web.xml müssen Sie auch den Filter in der Datei web.xml abbilden
<!-Mapping Filter-> <Filter-Mapping> <Filter-Name> Filterdemo </Filter-Name> <!-"/*" bedeutet, alle Anforderungen abzufangen-> <URL-Pattern>/*</url-pattern> </filter-mapping>
Das <filter-Mapping> -Element wird verwendet, um die Ressource festzulegen, für die ein Filter abgeholt wird. Ein Filter fällt ab, eine Ressource kann auf zwei Arten angegeben werden: den Servlet -Namen und den Anforderungspfad für den Ressourcenzugriff.
Das untergeordnete Element <Filter-Name> wird verwendet, um den Registrierungsnamen des Filters festzulegen. Dieser Wert muss der Name des im <url-puster> Element deklarierten Filters sein. Stellen Sie den Anforderungspfad durch den Filter fest (den mit dem Filter zugeordneten URL -Stil).
<servlet-name> Gibt den Namen des vom Filter abgefangenen Servlet an.
<Isconther> Gibt an, wie die vom Filter abgefangene Ressource vom Servlet -Container aufgerufen wird. Es kann sich um eine Anfrage, die Vorwärts- und Irrtum und die Standardanforderung handeln. Benutzer können mehrere Subelemente für die Angabe feststellen
Filter fängt verschiedene Arten des Aufrufens von Ressourcen ab. wie folgt:
<Filter-mapping> <Filter-Name> Testfilter </filter-name> <URL-Pattern> /Index.jsp </url-pattern> <dispatcher> Anforderung </Dispatcher> <Iffrugcher> Forward </Dispatcher> </filter-mapping>
Die Werte, die das untergeordnete Element festlegen kann, und ihre Bedeutungen:
1. Erzielung: Wenn der Benutzer direkt auf die Seite zugreift, ruft der Webcontainer den Filter auf. Wenn auf die Zielressource über die Methode include () oder vorwärts () des RequestDispatcher zugegriffen wird, wird der Filter nicht aufgerufen.
2. Inklude: Wenn die Zielressource über die Include () -Methode von RequestDispatcher zugegriffen wird, wird der Filter aufgerufen. Davon abgesehen wird der Filter nicht aufgerufen.
3. Forward: Wenn auf die Zielressource über die Stürmer () -Methode von RequestDispatcher zugegriffen wird, wird der Filter aufgerufen und der Filter nicht zusätzlich aufgerufen.
4.Error: Wenn die Zielressource durch den deklarativen Ausnahmebehandlungsmechanismus aufgerufen wird, wird der Filter aufgerufen. Davon abgesehen wird der Filter nicht aufgerufen.