【问题标题】:web.xml order or filter and listenerweb.xml 顺序或过滤器和监听器
【发布时间】:2012-04-28 19:14:47
【问题描述】:

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

【问题讨论】:

    标签: servlets servlet-filters servlet-listeners


    【解决方案1】:

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

    【讨论】:

    • 所以,不可能在 listener.requestInitialized() 之前执行 filter.doFilter() 吗?我正在阅读 servlet 2.5 规范,但我没有找到此信息。 download.oracle.com/otn-pub/jcp/…这是在哪里解释的?
    【解决方案2】:

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

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

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

    意味着侦听器首先出现在 ServletRequest 中。 所以在 ServletRequest 的情况下没有办法配置让 Fillter 在 Listener 之前执行 ....

    【讨论】:

      猜你喜欢
      • 2011-07-24
      • 1970-01-01
      • 2017-09-10
      • 1970-01-01
      • 2015-04-18
      • 2011-10-07
      • 2014-07-12
      • 2010-09-15
      • 2011-06-10
      相关资源
      最近更新 更多