Filter in Servlets und JSP sind Java-Klassen und ihr Existenzzweck ist wie folgt:
Abfangen, wenn Zugriff auf eine Backend-Ressource angefordert wird
Verwalten Sie die vom Server an den Client zurückgegebenen Antworten
Nachfolgend sind einige gängige Filtertypen aufgeführt:
Authentifizierungsfilter
Datenkomprimierungsfilter
Verschlüsselungsfilter
Filter, die Ressourcenzugriffsereignisse auslösen
Bildkonvertierungsfilter
Anmelde- und Authentifizierungsfilter
Kettenfilter vom MIME-Typ
Token-Filter
XSL/T-Filter zur Transformation von XML-Inhalten
Der Filter wird in die Datei web.xml eingefügt und dem Namen des Servlets, der JSP-Datei oder des URL-Musters zugeordnet. Die Bereitstellungsbeschreibungsdatei web.xml befindet sich im Verzeichnis <Tomcat-Installationsverzeichnis>conf.
Wenn der JSP-Container eine Webanwendung startet, erstellt er eine Instanz jedes Filters. Diese Filter müssen in der Bereitstellungsdeskriptordatei web.xml deklariert und in der Reihenfolge ausgeführt werden, in der sie deklariert werden.
Ein Filter ist eine Java-Klasse, die die Schnittstelle javax.servlet.Filter implementiert. Die javax.servlet.Filter-Schnittstelle definiert drei Methoden:
Seriennummer | Methode und Beschreibung |
---|---|
1 | public void doFilter (ServletRequest, ServletResponse, FilterChain) Der Container ruft diese Methode immer dann auf, wenn eine Anfrage/Antwort die Filterkette durchläuft, da der Client am Ende der Kette Ressourcen anfordert. |
2 | public void init(FilterConfig filterConfig) Der Container ruft diese Methode auf, um anzuzeigen, dass ein Filter im Dienst platziert ist |
3 | public void destroy() Diese Methode wird vom Container aufgerufen, um anzuzeigen, dass ein Filter aus dem Dienst entfernt wird |
In diesem Beispiel werden die IP-Adresse sowie Datum und Uhrzeit jedes Zugriffs auf die JSP-Datei gedruckt. Dies ist natürlich nur ein einfaches Beispiel, um Ihnen eine Vorstellung von der Verwendung einfacher Filter zu geben, aber Sie können diese Konzepte verwenden, um selbst komplexere Programme zu erstellen.
//Führen Sie das Java-Paket ein import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import java.util.*; //Implementieren Sie die Filterklasse public class LogFilter implementiert Filter { public void init( FilterConfig config) throws ServletException{ // Initialisierungsparameter abrufen String testParam = config.getInitParameter("test-param"); // Initialisierungsparameter drucken System.out.println("Test Param: " + testParam); } public void doFilter(ServletRequest request, ServletResponse Response, FilterChain chain) throws java.io.IOException, ServletException { // Client-IP-Adresse abrufen String ipAddress = request.getRemoteAddr(); // IP-Adresse und aktuelle Uhrzeit ausgeben System.out.println("IP "+ ipAddress + ", Time " + new Date().toString()); // Übergeben Sie die Anforderungsfilterkette chain.doFilter(request,response); public void destroy( ){ /* Nachdem die Filterinstanz zerstört wurde Server Wird vor dem Entfernen aufgerufen. */ }}
Kompilieren Sie die Datei LogFilter.java und platzieren Sie die kompilierte Klassendatei dann im Verzeichnis <Tomcat-Installationsverzeichnis>/webapps/ROOT/WEB-INF/classes.
Filter werden definiert und dann einer URL oder einem JSP-Dateinamen zugeordnet, ähnlich wie Servlets definiert und zugeordnet werden. Verwenden Sie in der Bereitstellungsbeschreibungsdatei web.xml das Tag <filter> für die Filterzuordnung:
<filter> <filter-name>LogFilter</filter-name> <filter-class>LogFilter</filter-class> <init-param> <param-name>test-param</param-name> <param-value >Initialisierungsparameter</param-value> </init-param></filter><filter-mapping> <filter-name>LogFilter</filter-name> <url-pattern>/*</url-pattern></filter-mapping>
Der obige Filter wird auf alle Servlets und JSP-Programme angewendet, da wir in der Konfiguration „/*“ angegeben haben. Sie können auch einen Servlet- oder JSP-Pfad angeben, wenn Sie den Filter nur auf einige Servlets oder JSP-Programme anwenden möchten.
Greifen Sie nun wie gewohnt auf die Servlet- oder JSP-Seite zu und Sie finden eine Aufzeichnung dieses Zugriffs im Serverprotokoll. Sie können den Log4J-Logger auch zum Protokollieren anderer Dateien verwenden.
Ihre Webanwendung kann viele verschiedene Filter definieren. Nachdem Sie nun zwei Filter definiert haben, AuthenFilter und LogFilter, sind die anderen Schritte dieselben wie zuvor, außer dass Sie eine andere Zuordnung erstellen, etwa so:
<filter> <filter-name>LogFilter</filter-name> <filter-class>LogFilter</filter-class> <init-param> <param-name>test-param</param-name> <param-value >Initialisierungsparameter</param-value> </init-param></filter> <filter> <filter-name>AuthenFilter</filter-name> <filter-class>AuthenFilter</filter-class> <init-param> <param-name>test-param</param-name> <param-value>Initialisierungsparameter</param-value> </init-param> </filter> <filter-mapping> <filter-name>LogFilter</filter-name> <url-pattern>/*</url-pattern></filter-mapping> <filter-mapping> <filter-name>AuthenFilter</filter-name> <url-pattern>/*</url-pattern></filter-mapping>
Die Zuordnungsreihenfolge der <filter>-Elemente in web.xml bestimmt die Reihenfolge, in der der Container diese Filter anwendet. Um die Reihenfolge der Anwendung umzukehren, kehren Sie einfach die Reihenfolge um, in der die <filter>-Elemente in web.xml definiert sind.
Im obigen Beispiel würde beispielsweise zuerst der LogFilter und dann der AuthenFilter angewendet, im folgenden Beispiel würde die Reihenfolge der Anwendung jedoch umgekehrt:
<filter-mapping> <filter-name>AuthenFilter</filter-name> <url-pattern>/*</url-pattern></filter-mapping> <filter-mapping> <filter-name>LogFilter</filter -name> <url-pattern>/*</url-pattern></filter-mapping>