使用ResposeWrapper的响应过滤器

时间:2016-02-22 22:59:32

标签: servlets java-ee filter gzip httpresponse

我遇到了一些代码,它们在将servlet输出返回给用户之前将其拉出来,它使用自定义的ServletResponseWrapper -it如果你知道我在说什么就这么着名,我的问题是:

1 - 现在拦截响应的功能完全是响应包装器的责任 - 通过覆盖它返回的输出流 - 过滤器对这种行为没有影响吗?我是对的吗?

2-如果过滤器拦截其请求的任何servlet关闭输出流会发生什么,chain.doFilter()之后的代码是否能够再次使用此流?过滤器会起作用吗?

3为什么包装的响应解决了"输出在被过滤器拦截之前直接返回到容器的问题" ...我的意思是为什么对响应的控制然后返回到过滤器?

1 个答案:

答案 0 :(得分:1)

我最近使用了本书中的示例代码来完成我的项目: Professional Java for Web Applications。第9章中有一个很好的压缩过滤器示例。

我没有参与这本书背后的公司。

以下是您问题的答案:

  1. 是的,你是对的。过滤器使用包装器包装原始HttpServletResponse,此时包装器负责管理输出流(但不是用于关闭流)。
  2. 在您自己的代码中关闭输出流根本不是一个好主意,无论您是否使用包裹的HttpServletResponse
  3. 对输出流的控制不会返回到过滤器。在chain.doFilter()之后的行中继续执行您的Web应用程序,如果有必要,您可以将一些数据写入包装的响应。但是不要在你的过滤器和servlet中关闭流。