对于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>
最佳答案
当Browser(client)向Server请求时,像(Tomcat)这样的容器会为客户端请求HttpServletRequest和Response Object HttpServletResponse创建请求对象,并且
如果配置任何实现“ServletRequestListener”的监听器,则将调用“public void requestInitialized(ServletRequestEvent sre)”方法
在通过容器创建请求和响应对象之后,如果请求有任何监听器,则监听器将首先执行.....
之后,如果已配置Fillter,则将HttpServletRequest和HttpServletResponse分配给Fillter。
意味着Listener首先出现在ServletRequest中。
因此,在ServletRequest情况下,没有方法可以使Fillter在监听器之前执行。
关于servlets - web.xml的顺序或过滤器和监听器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10191388/