【问题标题】:Spring MVC + Thymeleaf: Updates to static resourcesSpring MVC + Thymeleaf:更新静态资源
【发布时间】:2013-08-25 20:11:31
【问题描述】:

我的 SpringMVC/Thymeleaf 应用程序遇到问题,当我发布包含对静态资源(图像、CSS 文件、JavaScript 库)的更改的更新时,用户会遇到错误。出现问题是因为他们的浏览器缓存中有旧版本的资源,所以如果他们强制刷新问题就会消失,但大多数用户不知道这样做。

过去,我在其他框架中解决了这个问题,方法是让我的构建将构建号注入 Spring bean 并自定义 URL 构建机制以在 URL 中包含构建号。将此与将 Cache-Control 响应标头设置为这些资源的遥远日期相结合可确保只要用户在其浏览器缓存中有资源,除非我发布新版本,否则永远不会重新获取它。

Spring MVC/Thymeleaf 有解决这个问题的内置方法吗?如果没有,如何覆盖 Thymeleaf 中的 URL 写入机制,以便添加我上面描述的行为?

【问题讨论】:

    标签: java spring caching spring-mvc thymeleaf


    【解决方案1】:

    一种解决方案可能是编写自己的方言并定义自己的助手 sr。然后你可以写@{#sr(yoururl)}。您可以找到有关编写自己的 dialect 的信息。

    “至于创建您自己的实用程序对象,可以通过创建一个实现IExpressionEnhancingDialect 接口的简单方言来完成。这将使Thymeleaf 将您的getAdditionalExpressionObjects() 方法实现返回的任何对象添加到处理上下文。”

    在方言中,您可以定义硬编码的 buildnr。

    另一种方法是始终将 buildnr 添加到模型中,然后您可以写@{yoururl(buildnr=${buildnr})}

    或者更好的是你把它放到消息源中并且可以使用@{yoururl(buildnr=#{buildnr})}

    【讨论】: