web.xml命令或过滤器和监听器

时间:2012-04-17 12:36:52

标签: servlets servlet-filters servlet-listeners

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

2 个答案:

答案 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()