对于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/

10-14 11:56