2011-01-18 20 views

risposta

63

Servlet filtro viene utilizzato per il monitoraggio di richiesta e risposta dal client al servlet, o modificare la richiesta e la risposta, o di controllare e registrare.

Servlet Listener viene utilizzato per l'ascolto di eventi in un contenitore Web, ad esempio quando si crea una sessione o si posiziona un attributo in una sessione o se si passiva e si attiva in un altro contenitore, per iscriversi a questi eventi è possibile configurare ascoltatore in web.xml, ad esempio HttpSessionListener.

+0

E non vale nemmeno nulla che i listener implementino javax.servlet.ServletContextListener mentre i filtri implementano javax.servlet.Filter – dade

+0

Puoi chiarire questo per me? 'ServletRequestListener' ascolta' ServletRequestEvent', che è un evento attivato per ogni richiesta in arrivo. Se voglio registrare l'user-agent per ogni richiesta sulla mia web app, dovrei usare questo listener o un filtro? – arun

+1

@BalusC La definizione di un listener è obbligatoria? Mi dà errore 'Nessun WebApplicationContext trovato: nessun ContextLoaderListener registrato?' Se non definisco un listener nella mia applicazione Spring. –

2

Si può facilmente avere un'idea approssimativa con il significato inglese di questi due. Filer è lì per filtrare il contenuto/risorsa che arriva/esce da un servlet. D'altra parte, Listener è lì, per fare alcune cose correlate quando succede qualcosa all'applicazione web (ascolto).

31

I filtri vengono utilizzati per le richieste di pre e post processo. Guarda lo javax.servlet.Filter nel tuo javadoc javadoc tomcat/jboss/other.

Dove gli ascoltatori sono come trigger che possono essere collegati agli eventi in il server delle applicazioni (utilizziamo il termine contenitore qui). Con gli ascoltatori è possibile tenere traccia delle modifiche a livello di applicazione, di sessione, del ciclo di vita, delle modifiche degli attributi, ecc. Le interfacce implementate sono l'interfaccia javax.servlet.Listener.

In base alle risposte di @fnt riportate di seguito, vorrei provare a chiarirne altre. Gli ascoltatori vengono presi di mira per le modifiche del ciclo di vita, senza dover richiedere una richiesta del client. Pertanto, per una richiesta del client, potrebbero verificarsi molti più eventi del ciclo di vita prima che la richiesta venga eliminata. Esempio: Si desidera registrare tutte le sessioni che scadono. Si noti che SesionTimeout è un evento del ciclo di vita, che può accadere senza che l'utente debba fare nulla. Per uno scenario del genere, un ascoltatore sarà appropriato.

Alla domanda di registrazione quando arriva una richiesta. Non esiste alcuna associazione diretta di una nuova richiesta a un evento ascoltatore equivalente (evento del ciclo di vita della lettura). E quindi per ogni richiesta in arrivo se vuoi registrare qualcosa, Filter secondo me è la cosa giusta da usare.

Questo materiale da Oracle dovrebbe essere in grado di chiarire un po ' Filters and Listeners

HTH

+1

Quindi, se si vuole registrare qualcosa per ogni richiesta, si dovrebbe usare 'ServletRequestListener' o un filtro? – arun

+0

@arun Filter sarà la cosa giusta da usare. – Ayusman

+1

@Ayusman Probabilmente è necessaria una giustificazione per questa affermazione – fnt

4

Mentre è possibile modificare l'oggetto evento corrente all'interno di un ascoltatore, si non si può fermare l'esecuzione del gestore di eventi in corso in un ascoltatore. Non è possibile cancellare la coda eventi da un listener. Oltre a le differenze imposte nelle funzionalità, sono anche destinati a scopi diversi. Gli ascoltatori tendono a concentrarsi sull'interazione tra il gestore di eventi e il modello, mentre i filtri tendono a concentrarsi sull'interazione tra il gestore di eventi e il controller.

Fonte

: web

10

testo da Java EE 6

Filtro

Filter è un oggetto che trasformano la richiesta e risposta (intestazione così come il contenuto).

ascoltatori

È possibile monitorare e reagire agli eventi del ciclo di vita di una servlet definendo ascoltatore oggetti i cui metodi get invocato quando si verificano eventi del ciclo di vita.

19

Il filtro è proprio come un filtro dell'acqua, in cui i valori in entrata (richiesta) e in uscita (risposta) verranno filtrati.

Listener è come ascoltare (trigger) - quando richiesto, verrà eseguito.

2

Filtro: filtro è semplicemente il filtraggio della risposta e della richiesta proveniente dai client al servlet.

Listener: è come un trigger quando si verifica un trigger che intraprende l'azione.

0

In breve,

filtro è per Servlet, intercettando le richieste e le risposte.

Listener è per l'applicazione Web, fare i compiti importanti sugli eventi in contesto di livello, a livello di sessione, ecc

17

Una differenza importante è spesso trascurato: mentre gli ascoltatori vengono attivati ​​per una richiesta fisico reale, filtri funzionano con spedizioni di container servlet. Per una chiamata al listener possono esserci più filtri/invocazioni di servlet.

Listeners vs Filters

Mapping filters dispatcher types. Il collegamento è un po 'datato - non include il tipo di dispatcher Servlet 3.0 Async. Si può anche specificare i tipi di dispatcher con la @WebFilter della nota:

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

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

Dopo aver letto tutte le risposte e blog questo è quello che ho ottenuto

Filtro

Un filtro è un oggetto che intercetta dinamicamente le richieste e le risposte per trasformare o utilizzare le informazioni contenute nelle richieste o risposte .

I filtri di solito non creano risposte ma invece lo fornisce funzioni universali che possono essere "collegate" a qualsiasi tipo di servlet o pagina JSP.

Il filtro viene eseguito prima della visualizzazione di rendering ma dopo la risposta del controller con risposta .

Un filtro viene utilizzato nel livello Web solo come è definito in web.xml.

I filtri sono più adatti quando si tratta la richiesta/risposta come sistema di scatola nera . Funzioneranno indipendentemente da come è implementato il servlet .

filtri vengono utilizzati per eseguire operazioni di filtraggio come login autenticazione, controllo di richieste in ingresso da pagine web, conversione, la registrazione, la compressione, la crittografia e la decrittografia, ingresso convalida ecc

Un filtro servlet è utilizzata solo nel livello Web, non è possibile utilizzarlo al di fuori di un contesto Web.

Per maggiori dettagli sul filtro http://array151.com/blog/servlet-filter/

Listener

Servlet Listener viene utilizzato per l'ascolto di eventi in un contenitore web, come ad esempio quando si crea una sessione o di inserire un attributo in una sessione o se si passiva e si attiva in un altro contenitore, per iscriversi a questi eventi è possibile configurare listener in web.xml, ad esempio, HttpSessionListener.

ascoltatori vengono attivati ​​per una richiesta fisico che può essere attaccato alla divertendosi a application server .Con ascoltatori, è possibile tenere traccia a livello di applicazione, a livello di sessione, i cambiamenti del ciclo di vita, attribuire modifiche ecc

È possibile monitorare e reagire agli eventi nel ciclo di vita di un servlet tramite definendo oggetti listener i cui metodi vengono richiamati quando si verificano eventi ciclo di vita .

Per maggiori dettagli: http://array151.com/blog/servlet-listener/

e qui è la differenza http://array151.com/blog/difference-between-servlet-filter-and-servlet-listener/

Problemi correlati