【发布时间】:2014-09-08 12:41:07
【问题描述】:
我创建了服务器过滤器,它计算响应大小。它通过创建响应包装器来做到这一点,该包装器使用 Apache Commons CountingOutputStream 包装 ServletOutputStream。此外,包装器使用包装的流创建 PrintWriter。所以理论上,无论使用什么方法来创建实际的输出,都应该通过 CountingOutputStream。
问题在于,虽然整个事情适用于典型的 servlet 请求,但它对于静态内容却失败了。准确地说,请求被过滤器接收,响应包装器被创建并且chain.doFilter()被调用。但是,当它返回时,包装的流声称没有发送任何数据,而实际上已经发送了数据。经过进一步调试,在提供静态内容期间,响应包装器上似乎既没有调用 getOutputStream() 也没有调用 getWriter()。
过滤器和应用程序在 Jetty 8.1.x 上运行。 我浏览了 Jetty 的默认 servlet,它似乎以通常的方式提供静态内容(即通过获取输出流和写给它)。
所以问题是:为什么包装方法被忽略了?
【问题讨论】:
标签: java servlets servlet-filters jetty-8