2011-02-08 15 views
6

Ho letto che l'ordine in cui i filtri vengono elaborati può essere determinato dall'ordine in cui sono dichiarati in web.xmlCome specificare l'ordine dei mapping dei filtri su GlassFish?

Ma come fare questo senza web.xml, usando ad esempio l'annotazione @WebServlet? Non voglio riordinare il mio web.xml

+0

Non è controllabile tramite l'attributo 'loadOnStartupOrder'? – musiKk

risposta

7

Sembra che sia impossibile per i filtri annotati. Servlet 3.0 Specification dice:

Come descritto sopra, quando si utilizza annotazioni per definire le ascoltatori, servlet e filtri, l'ordine in cui essi sono invocate non è specificato.

+3

Bene, torniamo ai giorni della pietra quindi. – rapadura

+1

Riesci a credere che una catena di filtri non avrebbe disposizioni per mettere i link in un ordine specificato? Le persone che hanno specificato questo non hanno capito il mondo reale? –

+0

Incredibile ... – rapadura

2

Come nota @axtavt, non è possibile farlo. Ecco perché (penso) l'hanno progettato in questo modo.

Per specificare l'ordine, le annotazioni necessitano di un argomento aggiuntivo che (in qualche modo) specifica la posizione nella catena; per esempio. un ordine'. Ci sono problemi con questo:

  1. Se un servlet ha un numero di filtri il cui ordine è specificato dai parametri di annotazione, quindi il programmatore/deployer deve esaminare le annotazioni per tutte le classi di filtro per capire cosa la l'ordine effettivo è.

  2. Una determinata classe di filtro può in teoria essere utilizzata in più servlet, anche più applicazioni web. Ogni servlet o webapp potrebbe volere che l'ordine del filtro sia diverso. Non è possibile ottenere ciò semplicemente usando un'annotazione sulla classe filtro.

  3. Se qualcuno che implementa una webapp ha bisogno di modificare l'ordine del filtro, lui/lei dovrebbe modificare il codice sorgente, ricompilare e ricostruire il file WAR.

immagino i progettisti hanno esaminato questi problemi e hanno deciso che il miglior posto per specificare l'ordine del filtro si trova nel file web.xml.

+0

Quindi fondamentalmente perché in teoria qualcuno potrebbe usare un filtro su più webapps ... E le altre ragioni sono come "ma è noioso". Comunque mi piace che tu cerchi di capire perché. – rapadura

Problemi correlati