我已经看到很多例子,关于如何&为什么要包装一个响应。根据我的理解,扩展为HttpServletResponseWrapper
的类提供了一个servlet流,用于通过响应写入数据(以及我们可以根据需要添加的其他一些方法)。这样一个servlet可以在定制的响应流上写入数据。即使使用ResponseWrapper后,我们是否需要将数据写入原始响应?
此外,在自定义类中,我们可以修改流内容,如:删除空间,大小写转换或压缩等。但是,只要servlet完成工作并关闭响应流,就可以执行任何此类操作。所以基本上自定义类只用于保存响应数据。当控制权返回到servlet过滤器时,我们需要进一步在原始响应流上写入数据。我的上述认识
参考代码
CharResponseWrapper wrapper = new CharResponseWrapper((HttpServletResponse)response);
chain.doFilter(request, wrapper);
response.setContentLength(caw.toString().length());
out.write(caw.toString());
out.close();
其他参考资料
http://jango.wordpress.com/2009/04/27/js-minify-filter-in-java/
http://onjava.com/pub/a/onjava/2003/11/19/filters.html?page=3
现在,请给我解释一下由balusc
建议的代码它是否也不需要将数据写入响应流?请告诉我,我错过了一些部分。
你可以举一些例子(不是代码,但是一些示例应用程序的名称),它可能很难实现,也很复杂。它会让我清楚这个概念。 – 2011-02-16 18:00:01