Table des matières
1、ServletContext监听
ServletContextListener:用于对Servlet整个上下文进行监听(创建、销毁)。
ServletContextAttributeListener:对Servlet上下文属性的监听(增删改属性)。
2、Session监听
HttpSessionListener接口:对Session的整体状态的监听。
HttpSessionAttributeListener接口:对session的属性监听。
session的销毁有两种情况:
3、Request监听
ServletRequestListener:用于对Request请求进行监听(创建、销毁)。
ServletRequestAttributeListener:对Request属性的监听(增删改属性)。
4、在web.xml中配置
Maison Java javaDidacticiel Explication détaillée d'exemples de filtres, d'écouteurs et d'intercepteurs en Java

Explication détaillée d'exemples de filtres, d'écouteurs et d'intercepteurs en Java

Jun 25, 2017 pm 01:32 PM
java intercepter 机制 监听器 过滤器

1. Filtre

Le filtre est également appelé filtre. C'est la technologie la plus pratique de la technologie Servlet. Les développeurs Web utilisent la technologie Filter pour gérer toutes les ressources Web gérées par le serveur Web : telles que Jsp, Servlets, les fichiers d'images statiques ou les fichiers HTML statiques sont interceptés pour réaliser certaines fonctions spéciales. Par exemple, certaines fonctions avancées telles que le contrôle d'accès aux autorisations au niveau des URL, le filtrage du vocabulaire sensible et la compression des informations de réponse peuvent être implémentées.

Il est principalement utilisé pour pré-traiter les demandes des utilisateurs et peut également post-traiter HttpServletResponse. Le processus complet d'utilisation de Filter : Filter prétraite la demande de l'utilisateur, puis transmet la demande à Servlet pour traitement et génère une réponse, et enfin Filter post-traite la réponse du serveur.

est généralement utilisé avec l'architecture Spring aux endroits suivants :

1.1 Pour résoudre le problème d'écriture de caractères dans le problème d'encodage de la base de données, configurez le code dans web.xml

 1 <filter> 2       <filter-name>Encoding</filter-name> 3       <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 4       <init-param> 5           <param-name>encoding</param-name> 6           <param-value>utf-8</param-value> 7       </init-param> 8   </filter> 9   <filter-mapping>10       <filter-name>Encoding</filter-name>11       <url-pattern>/*</url-pattern>12   </filter-mapping>
Copier après la connexion
Afficher le code

1.2 Résoudre le problème de chargement séquentiel d'initialisation qui se produit lors de l'intégration avec mongodb et utiliser Filter pour compléter la fonction proxy

 1 <!-- 告诉ContextLoaderListener叫在spring的配置文档的位置--> 2   <context-param> 
 3      <param-name>contextConfigLocation</param-name> 
 4      <param-value> 
 5          classpath:spring-shiro-web.xml, 6           /WEB-INF/spring-servlet.xml 7      </param-value> 
 8  </context-param> 
 9 10 <filter>11     <filter-name>shiroFilter</filter-name>12     <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>13     <init-param>14         <param-name>targetFilterLifecycle</param-name>15         <param-value>true</param-value>16     </init-param>17 </filter>18 <!-- Make sure any request you want accessible to Shiro is filtered. /* catches all -->19 <!-- requests.  Usually this filter mapping is defined first (before all others) to -->20 <!-- ensure that Shiro works in subsequent filters in the filter chain:             -->21 <filter-mapping>22     <filter-name>shiroFilter</filter-name>23     <url-pattern>/*</url-pattern>24 </filter-mapping>25 26 <!-- 在tomcat启动的时候优先加载spring的配置文档 -->27     <listener> 
28         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
29      </listener>
Copier après la connexion
Afficher le code
过滤器生命周期的四个阶段:
Copier après la connexion
<span style="font-size: 14px">1、实例化:Web容器在部署Web应用程序时对所有过滤器进行实例化。Web容器回调它的无参构造方法。</span><br><span style="font-size: 14px">2、初始化:实例化完成之后,马上进行初始化工作。Web容器回调init()方法。</span>
Copier après la connexion
3、过滤:请求路径匹配过滤器的URL映射时。Web容器回调doFilter()方法——主要的工作方法。
Copier après la connexion
4、销毁: Web容器在卸载Web应用程序前,Web容器回调destroy()方法。
Copier après la connexion

 

二、监听器

监听器Listener就是在application,session,request三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件。

Listener是Servlet的监听器,可以监听客户端的请求和服务端的操作等。

主要有以下三类:

1、ServletContext监听

ServletContextListener:用于对Servlet整个上下文进行监听(创建、销毁)。
ServletContextAttributeListener:对Servlet上下文属性的监听(增删改属性)。

2、Session监听

Session属于http协议下的内容,接口位于javax.servlet.http.*包下。

HttpSessionListener接口:对Session的整体状态的监听。
HttpSessionAttributeListener接口:对session的属性监听。
session的销毁有两种情况:

2.1 session超时,web.xml配置: <session-config> <session-timeout>120session-timeout>

session-config>   

2.2 手工使session失效 public void invalidate();//使session失效方法。session.invalidate();

3、Request监听

ServletRequestListener:用于对Request请求进行监听(创建、销毁)。
ServletRequestAttributeListener:对Request属性的监听(增删改属性)。

4、在web.xml中配置

Listener配置信息必须在Filter和Servlet配置之前,Listener的初始化(ServletContentListener初始化)比Servlet和Filter都优先,

而销毁比Servlet和Filter都慢。

<listener> <listener-class>com.listener.classlistener-class> listener>

<context-param> <param-name>contextConfigLocationparam-name>

<param-value>classpath:spring/applicationContext-*.xmlparam-value>

context-param>

<

auditeur>

  <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class> 🎜>

auditeur> 4. 1 Spring utilise IntrospectorCleanupListener pour nettoyer le cache La fonction de cet écouteur est de rafraîchir le cache Introspector des JavaBeans du JDK lorsque l'application Web est fermée pour garantir que le chargeur de classe de l'application Web et le les classes qu'il charge sont libérées correctement. Si JavaBeans Introspector a été utilisé pour analyser les classes d'application, le cache Introspector à l'échelle du système contiendra une référence matérielle à ces classes. Par conséquent, ces classes et le chargeur de classes de l'application Web ne seront pas récupérés par le garbage collector lorsque l'application Web est fermée ! IntrospectorCleanupListener le nettoiera de manière appropriée afin qu'il puisse être recyclé par le ramasse-miettes. La seule façon de nettoyer Introspector est de vider tout le cache d'Introspector, il n'y a pas d'autre moyen de spécifier exactement à quelle classe l'application fait référence. Cela supprimera les résultats Introspector mis en cache de toutes les autres applications sur le serveur. Lors de l'utilisation du mécanisme de bean interne de Spring, il n'est pas nécessaire d'utiliser cet écouteur, car le propre cache des résultats d'introspection de Spring actualisera immédiatement le cache JavaBeans Introspector analysé et actualisera uniquement le cache JavaBeans Introspector analysé dans celui de l'application. ClassLoader Il y a un cache à l'intérieur. Bien que Spring lui-même ne génère pas de fuites, notez que même dans les cas où les classes du framework Spring elles-mêmes résident dans un chargeur de classe « commun » (tel que le ClassLoader du système), IntrospectorCleanupListener doit toujours être utilisé. Dans ce cas, cet IntrospectorCleanupListener nettoiera correctement le cache d'introspection de Spring. Les classes d'application ont rarement besoin d'utiliser JavaBeans Introspector directement, ce n'est donc généralement pas la ressource Introspector qui provoque des fuites de mémoire. En revanche, de nombreuses bibliothèques et frameworks, tels que Struts et Quartz, ne nettoient pas Introspector. Il est à noter qu'une simple fuite d'Introspector entraînera le non-recyclage du chargeur de classe de l'ensemble de l'application web ! Le résultat sera que lorsque l'application Web sera fermée, toutes les ressources de classe statiques (telles que les objets à instance unique) de l'application ne seront pas libérées. La cause première des fuites de mémoire ne vient pas réellement de ces classes non recyclées ! Remarque : IntrospectorCleanupListener doit être enregistré en tant que premier écouteur dans web.xml, avant tout autre écouteur, comme avant ContextLoaderListener de Spring, pour garantir que IntrospectorCleanupListener prend effet au moment approprié dans le cycle de vie de l'application Web.

<

auditeur>

 

<

listener-class>org.springframework.web.util.IntrospectorCleanupListenerlistener-class>

auditeur>

3. intercepteur à ressort

Les intercepteurs gérés par Spring doivent hériter Intercepter implémente HandlerInterceptor

Pour entrer dans l'intercepteur, vous devez d'abord configurer l'entrée du ressort


org.springframework.web.servlet. DispatcherServlet


 spring
/

La méthode d'écriture ci-dessus ne filtrera pas les URL se terminant par .jsp, si vous devez traiter .jsp, vous devez utiliser filtres, ou utiliser l'architecture shiro

Mais pour les ressources statiques générales, nous n'avons pas besoin de filtrer et d'intercepter, vous pouvez utiliser la configuration suivante

configuration web.xml

< ;servlet-mapping>

​ ​ ​default
pattern>*.js
/image /*


configuration spring-servlet .xml, faites attention à l'ajout du fichier d'en-tête

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Nombre parfait en Java Nombre parfait en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Générateur de nombres aléatoires en Java Générateur de nombres aléatoires en Java Aug 30, 2024 pm 04:27 PM

Guide du générateur de nombres aléatoires en Java. Nous discutons ici des fonctions en Java avec des exemples et de deux générateurs différents avec d'autres exemples.

Weka en Java Weka en Java Aug 30, 2024 pm 04:28 PM

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Numéro de Smith en Java Numéro de Smith en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Questions d'entretien chez Java Spring Questions d'entretien chez Java Spring Aug 30, 2024 pm 04:29 PM

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Horodatage à ce jour en Java Horodatage à ce jour en Java Aug 30, 2024 pm 04:28 PM

Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.

Programme Java pour trouver le volume de la capsule Programme Java pour trouver le volume de la capsule Feb 07, 2025 am 11:37 AM

Les capsules sont des figures géométriques tridimensionnelles, composées d'un cylindre et d'un hémisphère aux deux extrémités. Le volume de la capsule peut être calculé en ajoutant le volume du cylindre et le volume de l'hémisphère aux deux extrémités. Ce tutoriel discutera de la façon de calculer le volume d'une capsule donnée en Java en utilisant différentes méthodes. Formule de volume de capsule La formule du volume de la capsule est la suivante: Volume de capsule = volume cylindrique volume de deux hémisphères volume dans, R: Le rayon de l'hémisphère. H: La hauteur du cylindre (à l'exclusion de l'hémisphère). Exemple 1 entrer Rayon = 5 unités Hauteur = 10 unités Sortir Volume = 1570,8 unités cubes expliquer Calculer le volume à l'aide de la formule: Volume = π × r2 × h (4

See all articles