Filtre JSP
Les filtres dans les servlets et les JSP sont des classes Java, et leur but d'existence est le suivant :
Interception lors de la demande d'accès aux ressources back-end
Gérer les réponses renvoyées du serveur au client
Il existe plusieurs types de filtres couramment utilisés répertoriés ci-dessous :
Filtre d'authentification
Filtre de compression des données
Filtre de cryptage
Déclencheur d'accès aux ressources Filtres pour les événements
Filtres de conversion d'images
Filtres de connexion et d'authentification
Filtre de chaîne de type MIME
Filtre de jetons
Filtre XSL/T qui transforme le contenu XML
Le filtre sera inséré dans le web .xml et mappez le servlet, le nom du fichier JSP ou le modèle d'URL. Le fichier de description de déploiement web.xml se trouve dans le répertoire <Tomcat-installation-directory>conf.
Lorsque le conteneur JSP démarre une application web, il créera une instance de chaque filtre. Ces filtres doivent être déclarés dans le fichier descripteur de déploiement web.xml et exécutés dans l'ordre de déclaration.
Méthode de filtrage des servlets
Un filtre est une classe Java qui implémente l'interface javax.servlet.Filter. L'interface javax.servlet.Filter définit trois méthodes :
Numéro de série | < th>Méthode etDescription|||||||||
---|---|---|---|---|---|---|---|---|---|
1 | public void doFilter (ServletRequest, ServletResponse, FilterChain)
<🎜>Le conteneur appellera cette méthode chaque fois qu'une requête/réponse passe par la chaîne de filtrage, car le client demande des ressources à la fin de la chaîne< /td> | ||||||||
2 | public void init(FilterConfig filterConfig)<🎜> <🎜>Le le conteneur appelle cette méthode Indique qu'un filtre est placé dans le service | ||||||||
3 | public void destroy()<🎜> <🎜>Le conteneur appelle cette méthode pour indiquer qu'un filtre est en cours de suppression du service |
Exemple de filtre JSP
Cet exemple imprimera l'adresse IP ainsi que la date et l'heure de chaque accès au fichier JSP. Bien sûr, il ne s'agit que d'un exemple simple pour vous donner une idée de l'utilisation simple d'un filtre, mais vous pouvez utiliser ces concepts pour construire vous-même des programmes plus complexes.
// 引入Java包 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; // 实现 Filter 类 public class LogFilter implements Filter { public void init(FilterConfig config) throws ServletException{ // 获取初始化参数 String testParam = config.getInitParameter("test-param"); //打印初始化参数 System.out.println("Test Param: " + testParam); } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, ServletException { // 获取客户端ip地址 String ipAddress = request.getRemoteAddr(); // 输出ip地址及当前时间 System.out.println("IP "+ ipAddress + ", Time " + new Date().toString()); // 传递请求道过滤器链 chain.doFilter(request,response); } public void destroy( ){ /* 在Filter实例在服务器上被移除前调用。*/ } }
Compilez le fichier LogFilter.java, puis placez le fichier de classe compilé dans le répertoire <Répertoire d'installation de Tomcat>/webapps/ROOT/WEB-INF/classes.
Mappage de filtre JSP dans le fichier web.xml
Un filtre est défini puis mappé sur une URL ou un nom de fichier JSP, de la même manière qu'un servlet est défini puis cartographié. Dans le fichier de description du déploiement web.xml, utilisez la balise <filter> pour le mappage du filtre :
<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 sera appliqué à tous les servlets et programmes JSP car nous avons spécifié " /*". Vous pouvez également spécifier un chemin de servlet ou JSP si vous souhaitez appliquer le filtre uniquement à quelques servlets ou programmes JSP.
Maintenant, accédez à la page servlet ou JSP comme d'habitude, et vous constaterez qu'un enregistrement de cet accès est généré dans le journal du serveur. Vous pouvez également utiliser l'enregistreur Log4J pour vous connecter à d'autres fichiers.
Utiliser plusieurs filtres
Votre application Web peut définir de nombreux filtres différents. Maintenant que vous avez défini deux filtres, AuthenFilter et LogFilter, les autres étapes sont les mêmes qu'avant, sauf que vous créez un mappage différent, comme celui-ci :
<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 d'application du filtre
L'ordre dans lequel les éléments <filter> sont mappés dans web.xml détermine l'ordre dans lequel le conteneur applique ces filtres. Pour inverser l'ordre d'application, il vous suffit d'inverser l'ordre dans lequel les éléments <filter>
Par exemple, l'exemple ci-dessus appliquera d'abord le LogFilter puis l'AuthenFilter, mais l'exemple suivant inversera l'ordre d'application :
<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>