web-dev-qa-db-fra.com

Différence entre filtre et écouteur dans un servlet (Java EE)

Il existe des fonctionnalités de filtres et d'écouteurs dans Servlet. Je veux connaître la différence exacte entre Filter et Listener.

71
kandarp

Le filtre de servlet est utilisé pour surveiller la demande et la réponse du client au servlet, ou pour modifier la demande et la réponse, ou pour effectuer un audit et une journalisation.

Servlet Listener est utilisé pour écouter des événements dans des conteneurs Web, par exemple lorsque vous créez une session ou placez un attribut dans une session ou si vous passez et activez dans un autre conteneur, pour vous abonner à ces événements, vous pouvez configurer le programme d'écoute dans web.xml, par exemple HttpSessionListener.

76
Dead Programmer

Les filtres sont utilisés pour les demandes de pré et post traitement. Regarde le javax.servlet.Filter dans votre Tomcat/jboss/autre conteneur javadoc.

Où les écouteurs sont comme des déclencheurs pouvant être associés à des événements sur votre serveur d'applications (utilisons le terme conteneur ici). Avec les auditeurs, vous pouvez suivre les modifications au niveau de l'application, de la session, du cycle de vie, des attributs, etc. Les interfaces implémentées sont javax.servlet.Listener interface.

Sur la base des réponses de @fnt ci-dessous, laissez-moi essayer de clarifier davantage. Les auditeurs sont ciblés pour les modifications de cycle de vie, sans avoir à recevoir de requête client. Ainsi, pour une requête de client, il pourrait y avoir beaucoup plus d'événements de cycle de vie avant que la demande ne soit éliminée. Exemple: vous souhaitez consigner toutes les sessions ayant expiré. Notez que SesionTimeout est un événement du cycle de vie, qui peut se produire sans que l'utilisateur ait à faire quoi que ce soit. Pour un tel scénario, un auditeur sera approprié.

À la question de la journalisation quand une demande arrive. Il n'y a pas de mappage direct d'une nouvelle demande sur un événement d'écouteur équivalent (événement de cycle de vie en lecture). Et donc pour chaque demande entrante, si vous voulez enregistrer quelque chose, le filtre est à mon avis la bonne chose à utiliser.

Ce matériel d’Oracle devrait pouvoir en clarifier un peu plus Filtres et auditeurs

HTH

34
Ayusman

Filtre est semblable à un filtre à eau, où les valeurs entrantes (requête) et sortantes (réponse) seront filtrées.

Listener est comme écouter (trigger) - chaque fois que nécessaire, je serai exécuté.

21

Une différence importante est souvent négligée: alors que les écouteurs sont déclenchés pour une demande physique réelle, les filtres fonctionnent avec les distributions de conteneurs de servlets. Il peut y avoir plusieurs invocations de filtres/servlets pour un appel d'écouteur.

Listeners vs Filters

Types de répartiteurs de filtres de mappage . Le lien est un peu daté - il n'inclut pas le type de servlet 3.0 Async. On peut aussi spécifier des types de répartiteurs avec le @WebFilter annotation:

import javax.servlet.DispatcherType;
import javax.servlet.annotation.WebFilter;

@WebFilter(servletNames = { "My Servlet" },
    dispatcherTypes = { DispatcherType.REQUEST, DispatcherType.FORWARD })
21
Vsevolod Golovanov

Texte de Java EE 6

Filtre

Filtre est un objet qui transforme la demande et la réponse (en-tête et contenu).

Auditeurs

Vous pouvez surveiller et réagir aux événements du cycle de vie d'un servlet en définissant des objets d'écoute dont les méthodes sont appelées lorsque des événements du cycle de vie se produisent.

11
adatapost

Après avoir lu toutes les réponses et blogues, voici ce que j'ai

Filtre

Un filtre est un objet qui intercepte de manière dynamique les demandes et les réponses pour transformer ou utiliser les informations contenues dans les demandes ou les réponses.

Les filtres ne créent généralement pas de réponses, mais fournissent des fonctions universelles pouvant être "attachées" à tout type de servlet ou de page JSP.

Le filtre est exécuté avant de rendre la vue, mais après la réponse du contrôleur.

Un filtre est utilisé dans la couche Web uniquement tel qu'il est défini dans web.xml.

Les filtres conviennent mieux lorsque votre demande/réponse est traitée comme un système de boîte noire. Ils fonctionneront quelle que soit la manière dont le servlet est implémenté.

Les filtres sont utilisés pour effectuer des tâches de filtrage telles que l'authentification de connexion, l'audit des demandes entrantes provenant de pages Web, la conversion, la journalisation, la compression, le cryptage et le décryptage, la validation des entrées, etc.

Un filtre de servlet est utilisé uniquement dans la couche Web. Vous ne pouvez pas l'utiliser en dehors d'un contexte Web.

Pour plus de détails sur le filtre http://array151.com/blog/servlet-filter/

Listener

Servlet Listener est utilisé pour écouter les événements d'un conteneur Web, par exemple lorsque vous créez une session ou placez un attribut dans une session ou si vous passez et activez dans un autre conteneur, pour vous abonner à ces événements, vous pouvez configurer le programme d'écoute dans web.xml. par exemple, HttpSessionListener.

Les auditeurs sont déclenchés par une requête physique pouvant être associée à des événements sur votre serveur d'applications. Avec les écouteurs, vous pouvez suivre les modifications apportées au cycle de vie, aux applications, aux cycles de vie, aux attributs, etc.

Vous pouvez surveiller et réagir aux événements du cycle de vie d'un servlet en définissant des objets d'écoute dont les méthodes sont appelées lorsque des événements de cycle de vie se produisent.

Pour plus de détails: http://array151.com/blog/servlet-listener/

et voici la différence http://array151.com/blog/difference-between-servlet-filter-and-servlet-listener/

7
Sunil Garg

Bien que vous puissiez modifier l'objet d'événement en cours dans un écouteur, vous ne pouvez pas arrêter l'exécution du gestionnaire d'événements en cours dans un écouteur. Vous ne pouvez pas non plus effacer la file d'attente d'événements à partir d'un écouteur. Outre les différences de capacités imposées, elles sont également destinées à des objectifs différents. Les auditeurs ont tendance à se concentrer sur l'interaction entre le gestionnaire d'événements et le modèle, tandis que les filtres ont tendance à se concentrer sur l'interaction entre le gestionnaire d'événements et le contrôleur.

Source: web

4
Clyde Lobo

Vous pouvez facilement avoir une idée approximative de la signification anglaise de ces deux mots. Le filtre est là pour filtrer le contenu/la ressource qui entre/sort d'un Servlet. De l’autre côté, Listener est là pour faire certaines choses connexes lorsque quelque chose arrive à l’application Web (écoute).

3
Abimaran Kugathasan

Filtrer: Filtrer consiste simplement à filtrer la réponse et la demande provenant des clients au servlet.

Listener: est comme un déclencheur lorsqu'un déclencheur se produit, il prend l'action.

2
geet

En bref,

Le filtre est pour le servlet, interceptant les demandes et les réponses.

Listener est destiné à l'application Web et effectue des tâches importantes sur les événements au niveau du contexte, de la session, etc.

1
Mawia