2012-04-17 14 views
5

Para una aplicación web Java EE, Tengo un detector que implementa ServletRequestListener y un filtro.orden web.xml o filtro y detector

¿Hay alguna manera de especificar en web.xml que el filtro debe invocarse antes del escucha?

Ya he intentado declarar el filtro y su mapeo antes del oyente, pero el oyente todavía se ejecuta antes.

¿Alguna idea?

<filter> 
    <filter-name>myfilter</filter-name> 
    <filter-class>com.example.MyFilter</filter-class> 
    </filter> 
    <filter-mapping> 
    <filter-name>myfilter</filter-name> 
    <url-pattern>/*</url-pattern> 
    </filter-mapping> 
    <listener> 
    <listener-class>com.example.MyServletRequestListener </listener-class> 
    </listener> 

Respuesta

5

El ServletRequestListener.requestInitialized() se inicializará antes de cualquier filtro se invoca y ServletRequestListener.requestDestroyed() después de todas las declaraciones de método de filtro y de servicios.

+1

Entonces, no es posible tener el filtro.doFilter() ejecutado antes de un listener.requestInitialized()? Estoy leyendo la especificación de servlet 2.5, pero no encuentro esta información. http://download.oracle.com/otn-pub/jcp/servlet-2.5-mrel2-eval-oth-JSpec/servlet-2_5-mrel2-spec.pdf ¿dónde se explica esto? –

12

cuando el navegador (cliente) solicitud al servidor, el contenedor como (Tomcat) crear el objeto de solicitud de la solicitud del cliente HttpServletRequest y objeto respuesta HttpServletResponse y si configura cualquier oyente que implementa "ServletRequestListener" y luego "public void requestInitialized (SRE ServletRequestEvent)" método se llama

Después de la creación de la solicitud y de respuesta por objeto contenedor si hay cualquier oyente de Solicitud entonces listener se ejecutará primero .....

Después de eso HttpServletRequest y HttpServletResponse se asignará a el Fillter, si tiene configurado el Fillter ....

Medios El oyente aparece primero en la imagen para ServletRequest. Así que no hay forma de configurar para que Fillter se ejecute antes que Listener en el caso de ServletRequest ....