我遇到了SpringMVC / Thymeleaf应用程序的问题,当我发布包含静态资源更改(图像,CSS文件,JavaScript库)的更新时,用户会遇到错误。出现问题是因为他们的浏览器缓存中有旧版本的资源,因此如果他们执行强制刷新问题就会消失,但大多数用户都不知道这样做。
过去,我已经在其他框架中通过让我的构建将构建号注入Spring bean并自定义URL构建机制以在URL中包含构建号来解决这个问题。将此与将Cache-Control响应标头设置为这些资源上的远期日期相结合,可确保只要用户在其浏览器缓存中拥有该资源,就不会重新获取该资源,除非我发布新版本。
Spring MVC / Thymeleaf是否有内置的解决方法?如果没有,我如何覆盖Thymeleaf中的URL写入机制,以便我可以添加上面描述的行为?
答案 0 :(得分:2)
一种解决方案可能是编写自己的方言并定义自己的助手sr。然后你可以写@{#sr(yoururl)}
。您可以找到有关编写自己的dialect。
“至于创建自己的实用程序对象,可以通过创建实现
IExpressionEnhancingDialect
接口的简单方言来完成。这将使Thymeleaf添加getAdditionalExpressionObjects()
方法实现返回的任何对象到处理环境。“
在方言中,你可以定义buildnr硬编码。
另一种方法是将buildnr始终添加到模型中,然后您可以编写@{yoururl(buildnr=${buildnr})}
。
或者您最好将其放入消息来源,并可以使用@{yoururl(buildnr=#{buildnr})}
。