8

我有一个 Tomcat 过滤器,它根据 URL 将请求委托给处理对象。这是 中唯一的过滤器FilterChain。我有一个 Ajax 应用程序,它通过大量请求来敲击这个过滤器。

最近我注意到一个问题,过滤器的doFilter方法通常以提交的响应作为参数调用(在内部,它是标记为已提交的土狼响应)。

在我看来,发生这种情况的唯一方法是,如果recycle()没有在这个 coyote 响应上调用该方法。我已检查以确保我没有保留对任何请求、响应、输出流或写入器对象的引用。此外,我确保在 finally 块中关闭 outputStream。但是,这并不能解决此问题。

这听起来像是我正在做一些事情来滥用 servlet 容器,但我无法追踪它。

4

2 回答 2

4

我尝试过使用 Tomcat 6.16 和 6.18。这绝对是链中唯一的过滤器。

似乎有些东西保留了对 servlet outputStream 的引用。我将 ServletOutputStream 包装在自己的 OutputStream 中,然后确保引用被销毁。这解决了问题,因此我不再看到传入的已提交响应。

这是持有参考的奇怪副作用。但我认为它不符合 Tomcat 错误的条件。我怀疑 ImageIO.createImageOutputStream() 中的错误更可能是持有引用。

于 2008-09-05T17:14:40.767 回答
0

你用的是什么版本的Tomcat?对我来说,这听起来像是 Tomcat 中的一个错误,我想不出任何理由为什么应该使用已经提交的响应调用您的 doFilter 方法(如果该过滤器是链中唯一的一个,您确定吗? )。

于 2008-09-05T08:16:09.750 回答