JSP - Filter
In diesem Kapitel werden Filter in JSP erläutert. Servlet- und JSP-Filter sind Java-Klassen, die in der Servlet- und JSP-Programmierung für die folgenden Zwecke verwendet werden können:
Abfangen von Anforderungen von einem Client, bevor dieser auf eine Ressource im Back-End zugreift.
So bearbeiten Sie Antworten vom Server, bevor sie an den Client zurückgesendet werden.
Es gibt verschiedene Arten von Filtern, die in den Spezifikationen vorgeschlagen werden -
- Authentifizierungsfilter
- Datenkomprimierungsfilter
- Verschlüsselungsfilter
- Filter, die Ressourcenzugriffsereignisse auslösen
- Bildkonvertierungsfilter
- Protokollieren und Überwachen von Filtern
- MIME-TYPE-Kettenfilter
- Tokenisieren von Filtern
- XSL / T-Filter, die XML-Inhalte transformieren
Filter werden in der Bereitstellungsdeskriptordatei bereitgestellt web.xmlund ordnen Sie dann entweder Servlet- oder JSP-Namen oder URL-Mustern im Deployment-Deskriptor Ihrer Anwendung zu. Die Deployment-Deskriptordatei web.xml befindet sich im Verzeichnis <Tomcat-Installationsverzeichnis> \ conf .
Wenn der JSP-Container Ihre Webanwendung startet, erstellt er eine Instanz jedes Filters, den Sie im Bereitstellungsdeskriptor deklariert haben. Die Filter werden in der Reihenfolge ausgeführt, in der sie im Bereitstellungsdeskriptor deklariert sind.
Servlet-Filtermethoden
Ein Filter ist einfach eine Java-Klasse, die das implementiert javax.servlet.FilterSchnittstelle. Die Schnittstelle javax.servlet.Filter definiert drei Methoden:
S.No. | Methode & Beschreibung |
---|---|
1 | public void doFilter (ServletRequest, ServletResponse, FilterChain) Diese Methode wird vom Container jedes Mal aufgerufen, wenn ein Anforderungs- / Antwortpaar aufgrund einer Clientanforderung für eine Ressource am Ende der Kette durch die Kette geleitet wird. |
2 | public void init(FilterConfig filterConfig) Diese Methode wird vom Webcontainer aufgerufen, um einem Filter anzuzeigen, dass er in Betrieb genommen wird. |
3 | public void destroy() Diese Methode wird vom Webcontainer aufgerufen, um einem Filter anzuzeigen, dass er außer Betrieb genommen wird. |
Beispiel für einen JSP-Filter
Das folgende Beispiel zeigt, wie die IP-Adresse des Clients und die aktuelle Datums- und Uhrzeitangabe bei jedem Zugriff auf eine JSP-Datei gedruckt werden. Dieses Beispiel vermittelt Ihnen ein grundlegendes Verständnis des JSP-Filters. Sie können jedoch komplexere Filteranwendungen mit demselben Konzept schreiben:
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
// Implements Filter class
public class LogFilter implements Filter {
public void init(FilterConfig config) throws ServletException {
// Get init parameter
String testParam = config.getInitParameter("test-param");
//Print the init parameter
System.out.println("Test Param: " + testParam);
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws java.io.IOException, ServletException {
// Get the IP address of client machine.
String ipAddress = request.getRemoteAddr();
// Log the IP address and current timestamp.
System.out.println("IP "+ ipAddress + ", Time "+ new Date().toString());
// Pass request back down the filter chain
chain.doFilter(request,response);
}
public void destroy( ) {
/* Called before the Filter instance is removed
from service by the web container*/
}
}
Kompilieren LogFilter.java auf die übliche Weise und setzen Sie Ihre LogFilter.class Datei in <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/classes.
JSP-Filterzuordnung in Web.xml
Filter werden definiert und dann einer URL oder einem JSP-Dateinamen zugeordnet, ähnlich wie Servlet definiert und dann einem URL-Muster in zugeordnet wird web.xmlDatei. Erstellen Sie den folgenden Eintrag für das Filter-Tag in der Deployment-Deskriptordateiweb.xml
<filter>
<filter-name>LogFilter</filter-name>
<filter-class>LogFilter</filter-class>
<init-param>
<param-name>test-param</param-name>
<param-value>Initialization Paramter</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>LogFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Der obige Filter gilt für alle Servlets und JSP, da wir angegeben haben /*in unserer Konfiguration. Sie können ein bestimmtes Servlet oder den JSP-Pfad angeben, wenn Sie Filter nur auf wenige Servlets oder JSP anwenden möchten.
Versuchen Sie nun, ein Servlet oder eine JSP aufzurufen, und Sie sehen das generierte Protokoll in Ihrem Webserver-Protokoll. Sie können verwendenLog4J logger Um sich oben anzumelden, melden Sie sich in einer separaten Datei an.
Verwenden mehrerer Filter
Ihre Webanwendung definiert möglicherweise mehrere verschiedene Filter für einen bestimmten Zweck. Stellen Sie sich vor, Sie definieren zwei Filter, AuthenFilter und LogFilter . Der Rest des Prozesses bleibt wie oben erläutert, außer dass Sie eine andere Zuordnung erstellen müssen, wie unten erwähnt.
<filter>
<filter-name>LogFilter</filter-name>
<filter-class>LogFilter</filter-class>
<init-param>
<param-name>test-param</param-name>
<param-value>Initialization Paramter</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>Initialization Paramter</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>
Filter Anwendungsreihenfolge
Die Reihenfolge der Filterzuordnungselemente in web.xml bestimmt die Reihenfolge, in der der Webcontainer den Filter auf das Servlet oder die JSP anwendet. Um die Reihenfolge des Filters umzukehren, müssen Sie nur die Filterzuordnungselemente im umkehrenweb.xml Datei.
Im obigen Beispiel wird beispielsweise zuerst der LogFilter und dann AuthenFilter auf jedes Servlet oder jede JSP angewendet. Das folgende Beispiel kehrt die Reihenfolge um -
<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>