5

对于 Java EE Web 应用程序,我有一个实现 ServletRequestListener 的侦听器和一个过滤器。

有没有办法在 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>
4

2 回答 2

12

当浏览器(客户端)向服务器请求时,像(Tomcat)这样的容器为客户端请求 HttpServletRequest 和响应对象 HttpServletResponse 创建请求对象,如果您配置任何实现“ServletRequestListener”的侦听器,则“public void requestInitialized(ServletRequestEvent sre)”方法将调用

在容器创建请求和响应对象后,如果请求有任何侦听器,则侦听器将首先执行.....

之后 HttpServletRequest 和 HttpServletResponse 被分配给 Fillter ,如果你已经配置了 Fillter....

意味着 Listener 首先出现在 ServletRequest 中。因此,在 ServletRequest 案例中,无法配置让 Fillter 在 Listener 之前执行......

于 2012-06-29T07:09:04.717 回答
5

ServletRequestListener.requestInitialized()在调用任何过滤器之前以及ServletRequestListener.requestDestroyed()所有过滤器和服务方法返回之后进行初始化。

于 2012-04-17T12:47:55.810 回答