JSP - Filtres
Dans ce chapitre, nous aborderons les filtres dans JSP. Les filtres de servlet et JSP sont des classes Java qui peuvent être utilisées dans la programmation de servlet et JSP aux fins suivantes:
Pour intercepter les demandes d'un client avant qu'il n'accède à une ressource en back-end.
Pour manipuler les réponses du serveur avant qu'elles ne soient renvoyées au client.
Il existe différents types de filtres suggérés par les spécifications -
- Filtres d'authentification
- Filtres de compression de données
- Filtres de cryptage
- Filtres qui déclenchent des événements d'accès aux ressources
- Filtres de conversion d'image
- Filtres de journalisation et d'audit
- Filtres de chaîne MIME-TYPE
- Filtres de tokenisation
- Filtres XSL / T qui transforment le contenu XML
Les filtres sont déployés dans le fichier descripteur de déploiement web.xmlpuis mappez vers les noms de servlet ou JSP ou les modèles d'URL dans le descripteur de déploiement de votre application. Le fichier descripteur de déploiement web.xml se trouve dans le répertoire <Tomcat-installation-directory> \ conf .
Lorsque le conteneur JSP démarre votre application Web, il crée une instance de chaque filtre que vous avez déclaré dans le descripteur de déploiement. Les filtres s'exécutent dans l'ordre dans lequel ils sont déclarés dans le descripteur de déploiement.
Méthodes de filtrage des servlets
Un filtre est simplement une classe Java qui implémente le javax.servlet.Filterinterface. L'interface javax.servlet.Filter définit trois méthodes -
S.No. | Méthode et description |
---|---|
1 | public void doFilter (ServletRequest, ServletResponse, FilterChain) Cette méthode est appelée par le conteneur chaque fois qu'une paire demande / réponse est passée dans la chaîne en raison d'une demande client pour une ressource à la fin de la chaîne. |
2 | public void init(FilterConfig filterConfig) Cette méthode est appelée par le conteneur Web pour indiquer à un filtre qu'il est mis en service. |
3 | public void destroy() Cette méthode est appelée par le conteneur Web pour indiquer à un filtre qu'il est mis hors service. |
Exemple de filtre JSP
L'exemple suivant montre comment imprimer l'adresse IP du client et la date actuelle, chaque fois qu'il accède à un fichier JSP. Cet exemple vous donnera une compréhension de base du filtre JSP, mais vous pouvez écrire des applications de filtre plus sophistiquées en utilisant le même concept -
// 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*/
}
}
Compiler LogFilter.java de la manière habituelle et mettez votre LogFilter.class déposer dans <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/classes.
Mappage de filtres JSP dans Web.xml
Les filtres sont définis puis mappés à un nom de fichier URL ou JSP, de la même manière que le servlet est défini puis mappé à un modèle d'URL dans web.xmlfichier. Créez l'entrée suivante pour la balise de filtre dans le fichier descripteur de déploiementweb.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>
Le filtre ci-dessus s'appliquera à toutes les servlets et JSP car nous avons spécifié /*dans notre configuration. Vous pouvez spécifier un servlet particulier ou le chemin JSP si vous souhaitez appliquer le filtre à quelques servlets ou à JSP uniquement.
Essayez maintenant d'appeler n'importe quel servlet ou JSP et vous verrez le journal généré dans le journal de votre serveur Web. Vous pouvez utiliserLog4J logger pour vous connecter ci-dessus, connectez-vous dans un fichier séparé.
Utilisation de plusieurs filtres
Votre application Web peut définir plusieurs filtres différents dans un but précis. Considérez, vous définissez deux filtres AuthenFilter et LogFilter . Le reste du processus restera comme expliqué ci-dessus, sauf que vous devez créer un mappage différent comme mentionné ci-dessous -
<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>
Ordre des applications des filtres
L'ordre des éléments de mappage de filtre dans web.xml détermine l'ordre dans lequel le conteneur Web applique le filtre au servlet ou à la JSP. Pour inverser l'ordre du filtre, il vous suffit d'inverser les éléments de mappage de filtre dans leweb.xml fichier.
Par exemple, l'exemple ci-dessus appliquera d'abord le LogFilter, puis il appliquera AuthenFilter à n'importe quel servlet ou JSP; l'exemple suivant inversera l'ordre -
<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>