用于缓存的 Servlet 过滤器

问题描述 投票:0回答:1

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

 response.getWriter().print(result);

我的问题是,由于响应正文将不加修改地放入memcached,我是否还需要创建自定义的HttpServletResponseWrapper?谁能提供这个过滤器的框架代码?

java servlets servlet-filters
1个回答
3
投票

您需要能够在过滤器中捕获 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 容器前面使用单独的 代理服务器 。您可以通过常用的

Cache-Control
HTTP 标头来控制应缓存的内容(如果 servlet 尚未执行此操作,则可以使用过滤器进行设置)。

© www.soinside.com 2019 - 2024. All rights reserved.