2011-01-18 21 views

Respuesta

63

servlet de filtro se utiliza para el control de petición y respuesta del cliente para el servlet, o para modificar la petición y respuesta, o para auditar y registro.

Servlet Listener se utiliza para escuchar eventos en un contenedor web, como cuando crea una sesión, o coloca un atributo en una sesión o si lo pasiva y activa en otro contenedor, para suscribirse a estos eventos puede configurar oyente en web.xml, por ejemplo HttpSessionListener.

+0

Y tampoco vale la pena que los oyentes implementen javax.servlet.ServletContextListener mientras los filtros implementan javax.servlet.Filter – dade

+0

¿Pueden aclarar esto por mí? 'ServletRequestListener' escucha' ServletRequestEvent', que es un evento activado para cada solicitud entrante. Si deseo registrar el agente de usuario para cada solicitud a mi aplicación web, ¿debería usar este oyente o un filtro? – arun

+1

@BalusC ¿Definir un oyente es obligatorio? Me da error 'No se encontró WebApplicationContext: no ContextLoaderListener registrado?' Si no defino un oyente en mi aplicación Spring. –

2

Fácilmente puede tener una idea aproximada con el significado en inglés de esos dos. Filer está ahí para filtrar el contenido/recurso que entra/sale de un servlet. Por otro lado, Listener está allí, para hacer algunas cosas relacionadas cuando sucede algo en la aplicación web (escuchar).

31

Los filtros se utilizan para solicitudes de proceso previas y posteriores. Mira el javax.servlet.Filter en tu tomcat/jboss/otro contenedor javadoc.

Donde los oyentes son como desencadenantes que se pueden unir a eventos en su servidor de aplicaciones (usemos el término contenedor aquí). Con los oyentes puede realizar un seguimiento de nivel de aplicación, nivel de sesión, cambios de ciclo de vida, cambios de atributos, etc. Las interfaces implementadas son javax.servlet.Listener interfaz.

Según las respuestas de @fnt a continuación, permítanme aclarar algunas más. Los oyentes son el objetivo de los cambios en el ciclo de vida, sin tener que recibir una solicitud del cliente. Por lo tanto, para una solicitud del cliente, puede haber muchos más eventos del ciclo de vida antes de que se elimine la solicitud. Ejemplo: Quiere registrar todas las sesiones que exceden el tiempo de espera. Tenga en cuenta que SesionTimeout es un evento de ciclo de vida, que puede suceder sin que el usuario tenga que hacer nada. Para tal escenario, un oyente será apropiado.

A la cuestión del registro cuando llega una solicitud. No hay una asignación directa de una nueva solicitud a un evento detector equivalente (leer el evento del ciclo de vida). Y, por lo tanto, para cada solicitud entrante si desea registrar algo, Filter es, en mi opinión, lo correcto.

Este material de Oracle debe ser capaz de aclarar un poco más Filters and Listeners

HTH

+1

Así que si uno quiere entrar algo acerca de cada petición, debe uno usar 'ServletRequestListener' o un filtro? – arun

+0

@arun Filter será lo correcto para usar. – Ayusman

+1

@Ayusman Probablemente se requiere justificación para esta declaración – fnt

4

Si bien se puede modificar el objeto de evento actual dentro de un oyente, que no puede detener la ejecución del controlador de eventos actual en un oyente Tampoco puede borrar la cola de eventos desde un oyente. Además de las diferencias impuestas en las capacidades, también están previstas para diferentes propósitos. Los oyentes tienden a centrarse en la interacción entre el controlador de eventos y el modelo, mientras que los filtros tienden a centrarse en la interacción entre el controlador de eventos y el controlador.

Fuente: web

10

texto de Java EE 6

Filtro

filtro es un objeto que transforman la solicitud y la respuesta (cabecera así como el contenido).

oyentes

Puede controlar y reaccionar a los eventos en el ciclo de vida de un servlet mediante la definición de los objetos detectores cuyos métodos conseguir invocado cuando se producen eventos del ciclo de vida.

19

El filtro es como un filtro de agua, donde se filtrarán los valores de entrada (solicitud) y de salida (respuesta).

La escucha es como escuchar (disparar): siempre que sea necesario, me realizaré.

2

Filtro: El filtro simplemente filtra la respuesta y la solicitud de los clientes al servlet.

Oyente: es como un disparador cuando se produce un desencadenador, toma la acción.

0

En resumen,

filtro es para el servlet, interceptando las solicitudes y respuestas.

Listener es para la aplicación Web, haciendo tareas importantes en eventos en el nivel de contexto, a nivel de sesión, etc.

17

Una diferencia importante es a menudo pasado por alto: mientras que los oyentes se disparará para una solicitud físico real, filtros funcionan con despachos de contenedores de servlet. Para una invocación de escucha, puede haber múltiples filtros/invocaciones de servlet.

Listeners vs Filters

Mapping filters dispatcher types. El enlace está un poco anticuado, no incluye el tipo de servidor Servlet 3.0 Async. También se puede especificar tipos de distribuidor con el @WebFilter anotación:

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

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

Después de leer todas las respuestas y blogs que esto es lo que tengo

Filtro

Un filtro es un objeto que intercepta dinámicamente solicitudes y respuestas para transformar o usar la información contenida en las solicitudes o respuestas .

Los filtros generalmente no crean respuestas, sino que en su lugar proporcionan funciones universales que se pueden "adjuntar" a cualquier tipo de servlet o página JSP.

El filtro se ejecuta antes de la vista de representación, pero después de que el controlador emita la respuesta .

Un filtro se utiliza en la capa web solo como se define en web.xml.

Los filtros son más adecuados al tratar su solicitud/respuesta como un sistema de caja negra . Funcionarán independientemente de cómo esté implementado el servlet .

filtros se utilizan para realizar tareas de filtrado, tales como entrada autenticación, auditoría de solicitudes entrantes de páginas web, conversión, la tala, de compresión, de cifrado y descifrado, de entrada validación etc.

se utiliza un filtro Servlet solo en la capa web, no puede usarlo fuera de un contexto web.

Para más detalles sobre el filtro http://array151.com/blog/servlet-filter/

Listener

servlet Listener se utiliza para escuchar a los eventos en un contenedor web, por ejemplo, cuando se crea una sesión o colocar un atributo en una sesión o si pasiva y se activa en otro contenedor, para suscribirse a estos eventos puede configurar oyente en web.xml, por ejemplo, HttpSessionListener.

oyentes disparará para una solicitud físico real que puede ser asociados a eventos en el servidor de aplicación .Con oyentes, se puede realizar un seguimiento de nivel de aplicación, a nivel de sesión, los cambios del ciclo de vida, etc. atribuir cambios

Puede supervisar y reaccionar ante eventos en el ciclo de vida de un servlet por definiendo objetos de escucha cuyos métodos se invocan cuando ocurren los eventos del ciclo de vida .

Para más detalles: http://array151.com/blog/servlet-listener/

y aquí está la diferencia http://array151.com/blog/difference-between-servlet-filter-and-servlet-listener/

Cuestiones relacionadas