我正在为缓存创建一个servlet过滤器。我们的想法是将响应主体缓存到memcached。响应体由(结果是字符串)生成:
response.getWriter().print(result);
我的问题是,由于响应主体将在没有修改的情况下放入memcached,我还需要创建一个自定义的HttpServletResponseWrapper吗?任何人都可以为此过滤器提供任何框架代码吗?
答案 0 :(得分:2)
您需要能够在过滤器中捕获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尚未使用过滤器,您可以使用过滤器进行设置)。