缓存servlet提供的图像

aku*_*001 10 java caching servlets image http

我正在从我的servlet提供图像.响应内容类型是image/jpeg.我发现从我的servlet请求的图像没有被缓存.如何通过文件图像请求缓存它们?我尝试设置Cache-Control:public但无济于事.

ZZ *_*der 23

在Tomcat等容器中提供静态内容的默认servlet不会设置任何缓存控制头.您不需要为此编写servlet.只需创建一个这样的过滤器,

public void doFilter(ServletRequest request,
        ServletResponse response,
        FilterChain chain) 
    throws IOException, ServletException {

    long expiry = new Date().getTime() + cacheAge*1000;

    HttpServletResponse httpResponse = (HttpServletResponse)response;
    httpResponse.setDateHeader("Expires", expiry);
    httpResponse.setHeader("Cache-Control", "max-age="+ cacheAge);

    chain.doFilter(request, response);

 }
Run Code Online (Sandbox Code Playgroud)

无论何时需要添加缓存控制,只需将过滤器添加到web.xml中的资源即可.例如,

<filter>
    <filter-name>CacheControl</filter-name>
    <filter-class>filters.CacheControlFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>CacheControl</filter-name>
    <url-pattern>/images/*</url-pattern>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)

  • 标头以毫秒为单位工作,因此`cacheAge`是您希望缓存内容的秒数. (2认同)
  • 这个过滤器可以用于css和javascript文件吗? (2认同)

aku*_*001 -10

好吧..看起来默认标头字段应该启用缓存。我在另一个论坛找到了解决方案。显然,您需要在响应中显式设置内容长度。但想知道为什么。我认为 HttpServletResponse 可以为我们做到这一点。不管怎样,它就像一个魅力,图像被很好地缓存。

  • 也许您可以提供一个指向您找到答案的论坛的链接? (5认同)