您需要能够捕获过滤器中的servlet输出。
为此,您需要注入一个自定义的HttpServletResponseWrapper,收集发送到getWriter().print()
某处的所有输出,以便您可以将其交给memcached。
也许沿着线的东西:
ByteArrayOutputStream baos = new ByteArrayOutputStream(3000);
final PrintWriter w = new PrintWriter(new OutputStreamWriter(baos, "UTF-8"));
HttpServletResponse wrapper = new HttpServletResponseWrapper(response) {
@Override
public PrintWriter getWriter() throws IOException {
return w;
}
};
如果这是一个更大的项目,你必须在网络基础设施的控制,它也可能是一个好主意,在Java中没有做到这一点,只是在Servlet容器前使用一个单独的代理服务器。您可以控制通常缓存控制标头应该缓存的内容(如果servlet尚未执行,可以使用筛选器设置它)。
谢谢,这是否意味着即使响应主体不会被修改,HttpServletResponseWrapper也是必须的? – dolphincody 2011-04-26 01:34:44
你还将如何去servlet的输出?如果你什么都不做,它会直接写入浏览器的网络连接,而你的过滤器不会看到任何内容。 – Thilo 2011-04-26 01:36:56
谢谢,现在我该如何从包装器中获取响应体呢? – dolphincody 2011-04-26 02:04:23