对于Java EE Web应用程序, 我有一个实现ServletRequestListener的侦听器和一个Filter。
有没有办法在web.xml中指定应该在侦听器之前调用过滤器?
我已经尝试在侦听器之前声明过滤器及其映射, 但是听众仍然在执行之前。
有什么想法吗?
<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>
答案 0 :(得分:12)
当浏览器(客户端)向服务器请求时,像(Tomcat)这样的容器为客户端请求创建请求对象HttpServletRequest和响应对象HttpServletResponse和 如果您配置任何实现“ServletRequestListener”的侦听器,那么“public void requestInitialized(ServletRequestEvent sre)”方法将调用
在按容器创建Request和Response Object之后,如果有任何侦听器,则Listener将首先执行.....
如果已配置Fillter,则将HttpServletRequest和HttpServletResponse分配给Fillter ....
意味着监听器首先为ServletRequest提供图片。 所以没有办法在ServletRequest情况下配置让Fillter在Listener之前执行....
答案 1 :(得分:5)
在调用任何过滤器之前初始化ServletRequestListener.requestInitialized()
,并在所有过滤器和服务方法返回后初始化ServletRequestListener.requestDestroyed()
。