【问题标题】:Caching of Static Files in GWT在 GWT 中缓存静态文件
【发布时间】:2017-03-28 09:25:15
【问题描述】:

使用 GWT 开发的应用程序包含大量静态文件 (javascript,css,images),我想缓存 30 天。我读了很多博客,但没有得到任何线索。

- 如何缓存静态文件? - 实现缓存的可能选项是什么(我需要在服务器或 GWT 应用程序中配置,这里我使用 glassfish/payara 服务器进行部署)

有什么想法吗? 注意:我想通过最少的代码更改来实现这一点,即使我读过这个Client side caching in GWT 但不想使用调度程序方法

【问题讨论】:

    标签: java caching gwt


    【解决方案1】:

    您需要将 ExpiresFilter 之类的内容添加到您的 servlet 容器中。

    我正在从上面提到的链接中添加配置的详细信息,以防链接的内容消失:

    您需要编辑 web.xml 以添加过滤器和过滤器映射:

    <filter>
        <filter-name>ExpiresFilter</filter-name>
        <filter-class>server.ExpiresFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>ExpiresFilter</filter-name>
        <url-pattern>/images/\*</url-pattern> <!-- these patterns should match cached resources -->
        <url-pattern>/resources/\*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
    </filter-mapping> 
    

    如果您需要在不同的应用服务器中使用更便携的方法,您最终可能会像我一样编写一个通用的 servlet Filter

    毕竟这没什么大不了的,因为您只是在给定路径上为HttpServletRequests 设置了ExpiresCache-Control: max-age 标头。

    作为初学者,我偶然发现了 this 的实现,而 how Tomcat 做到了。

    【讨论】:

    • 感谢 sebastain(+1).. 会做什么?它是强制性的吗?这里我又遇到了一个问题.cache.html 文件给出了 404,但我也想缓存这个文件
    • 我认为 Glassfish 的示例使用它将过滤器也应用于转发的请求,因为 &lt;dispatcher&gt;REQUEST&lt;/dispatcher&gt; 是默认设置。这个site 澄清了一点。我认为对于您的用例,您可以省略两个 dispatcher 行。但是过滤器不应该产生 404,它只是告诉您的浏览器在给定的时间段内不要再次请求文件。