Cet article présente principalement l'explication détaillée du filtrefiltre de JavaWeb et analyse les compétences d'utilisation du filtre de JavaWeb avec des exemples. Il est d'une grande valeur pratique et les amis dans le besoin peuvent s'y référer.
À l'origine, j'avais prévu cet article pour résumer JSP Comme JSP a beaucoup de contenu et que je veux courir la nuit pour perdre du poids, je vais aujourd'hui présenter le filtre et ses exemples d'utilisation. De cette façon, il reste encore du temps pour faire de l'exercice. Plus près de chez nous, le filtre a littéralement pour fonction de bloquer et de filtrer. Il peut être considéré comme l'assistant de blocage de JavaWeb.
1. Origine
Le client lance une requête, de sorte que le serveur ne peut pas répondre à toutes les requêtes. Le traitement de l'interception peut non seulement réduire la charge de travail. du serveur Il peut également protéger la sécurité des données. De même, lorsque le serveur répond au client, il faut parfois le filtrer, comme nos images communes en ajoutant des filigranes. Afin de faire face à ces problèmes, des filtres sont apparus. Parfois, la requête et la réponse ne sont pas seulement filtrées à un seul niveau, mais peuvent être filtrées à plusieurs niveaux, c'est pourquoi le concept de chaîne de filtres (FilterChain) est proposé
2 , utilisez
et familiarisez-vous avec sa fonction avant de l'utiliser. Le filtre passera par la chaîne de filtrage avant que la requête n'atteigne leServlet et avant que la réponse n'atteigne le navigateur. Un peu similaire au httpmodule dans asp.net L'utilisation de Filter implémente principalement javax.servlet.filterinterface. Affichez l'API et vous pouvez voir qu'il existe 3 méthodes.
1.public void init(FilterConfig filterConfig) renvoie un servletException
Appelé par le conteneur Web pour indiquer le filtre qui sera mis dans le service. Le conteneur de servlet appelle la méthode init une seule fois après l'instanciation du filtre. La méthode init doit se terminer avec succès avant de demander au filtre d'effectuer un travail de filtrage. Si la méthode init renvoie une ServletException ou ne renvoie pas dans le délai défini par le conteneur Web, le conteneur Web ne peut pas placer le filtre dans le service. Ceci est quelque peu similaire aucycle de vie du servlet. Il n'est initialisé qu'une seule fois et destroy() est également exécuté une fois.
2. public void doFilter (demande ServletRequest, réponse ServletResponse, chaîne FilterChain) renvoie java.io.IOException, ServletException
À chaque fois en raison d'une paire à la fin de la chaîne Lorsqu'une requête client pour une ressource transmet une paire requête/réponse à travers la chaîne, le conteneur appelle la méthode doFilter du Filter. Le FilterChain passé dans cette méthode permet au Filter de transmettre la demande et la réponse à l'entité suivante de la chaîne.Une implémentation typique de cette méthode suit le modèle suivant :
Objet enveloppé dans le contenu du filtre ou l'en-tête pour le filtrage des entrées
3. public void destroy()
Appelé par le conteneur Web pour indiquer le filtre à retirer du service. Cette méthode n'est appelée qu'une seule fois, après que tous les threads de la méthode doFilter du filtre se soientsortis, ou après l'expiration du délai d'attente. Après avoir appelé cette méthode, le conteneur Web n'appellera pas la méthode doFilter sur cette instance de filtre. Cette méthode offre au filtre la possibilité de nettoyer toutes les ressources qu'il contient (telles que la mémoire, les descripteurs de fichiers et les threads) et garantit que tout état persistant est synchronisé avec l'état actuel du filtre dans mémoire.
3. Cas
Il existe de nombreux endroits pour utiliser les filtres, je ne donnerai donc pas d'exemples ici un par un. est dans le blog précédent Basé sur le projet HelloWorld, la fonction anti-sangsue est implémentée pour expérimenter l'utilisation de Filter. 1.PréparationDans le projet HelloWolrd ajoutez un dossier et mettez deux images dans le dossier, une err.png et une test.png Les deux images sont les suivantes
<.>
2. Créer un filtre Il n'y a pas de nouveau package Filter ici. Créez le fichier Filter MyFilter directement dans le package com.test.cyw dans le blog précédent. pour gérer Filter Eh bien, c'est juste pour tester. Après la création, vous pouvez voir que MyFilterhérite de Filter.
public class MyFilter implements Filter
package com.test.cyw; 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; import javax.servlet.annotation.WebFilter; import javax.servlet.http.*; /*@WebFilter("/MyFilter")*/ public class MyFilter implements Filter { public MyFilter() { } public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req=(HttpServletRequest)request; HttpServletResponse res=(HttpServletResponse)response; String referer=req.getHeader("referer");//链接来源地址 if(referer==null||!referer.contains(req.getServerName())) { req.getRequestDispatcher("/Images/err.png").forward(req, res); return; } chain.doFilter(req, res); } public void init(FilterConfig fConfig) throws ServletException { } }
xml. C'est un peu la même chose que configurer une servlet.
<filter> <filter-name>MyFilter</filter-name> <filter-class>com.test.cyw.MyFilter</filter-class> </filter> <filter-mapping> <filter-name>MyFilter</filter-name> <url-pattern>/Images/*</url-pattern> </filter-mapping>
.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <img alt="防盗链" src="Images/test.png" width="400"> </body> </html>
s'affichera
4. Problèmes rencontrés
Au début, en raison d'une erreur d'adresse, l'image affichée dans Google Chrome test.jsp était aussi l'image err.png, mais lorsque j'ai basculé et actualisé la page, cela n'a toujours pas changé. Parfois, le redémarrage de Tomca ne fonctionne pas, et cela fonctionne encore plusieurs fois. Lorsque cela ne fonctionne vraiment pas, je l'ai essayé avec IE, mais je ne m'attendais pas à ce que l'affichage soit correct. Il s'avère que Google Chrome l'a fait. uncache , qui provoquait un affichage incorrect.
5. Résumé
Le filtre a de nombreuses utilisations, et il existe de nombreux exemples sur Internet Lorsque vous réalisez des projets, vous pouvez d'abord en mettre en œuvre. ceux couramment utilisés tels que les filigranes, etc. Lors de son utilisation, il vous suffit de configurer le XML pour résoudre le problème, ce qui est très pratique.Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!