用于缓存的Servlet过滤器

时间:2011-04-26 01:13:34

标签: java servlets servlet-filters

我正在为缓存创建一个servlet过滤器。我们的想法是将响应主体缓存到memcached。响应体由(结果是字符串)生成:

 response.getWriter().print(result);

我的问题是,由于响应主体将在没有修改的情况下放入memcached,我还需要创建一个自定义的HttpServletResponseWrapper吗?任何人都可以为此过滤器提供任何框架代码吗?

1 个答案:

答案 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尚未使用过滤器,您可以使用过滤器进行设置)。