我有一个Tomcat过滤器,它根据URL将请求委托给一个处理对象。这是FilterChain
中唯一的过滤器。我有一个Ajax应用程序,可以通过大量请求来破坏这个过滤器。
最近我注意到一个问题,即过滤器的doFilter
方法通常使用已提交的响应作为参数进行调用(在内部,它是标记为已提交的土狼响应)。
在我看来,这种情况发生的唯一方法就是如果没有在这个土狼响应中调用recycle()
方法。我已经检查过以确保我没有保留对任何request,response,outputStream或writer对象的引用。另外,我确保在finally块中关闭outputStream。但是,这不能解决此问题。
这听起来像是在做一些滥用servlet容器的事情,但是我无法跟踪它。
答案 0 :(得分:3)
我尝试过使用Tomcat 6.16和6.18。这绝对是链中唯一的过滤器。
似乎有些东西保留了对servlet outputStream的引用。我将ServletOutputStream包装在我自己的OutputStream中,然后确保引用被销毁。这解决了问题,因此我不再看到传入的已提交响应。
这是持有参考的奇怪副作用。但我不认为它有资格作为Tomcat错误。更可能是我怀疑ImageIO.createImageOutputStream()中存在错误的错误。
答案 1 :(得分:0)
您使用的是哪种版本的Tomcat?对我来说,这听起来像是Tomcat中的一个错误,我想不出为什么应该使用已经提交的响应来调用doFilter方法的任何原因(如果该过滤器是链中唯一的那个,你确定吗? )。