Java web app : Force browser to load static content (js, css, html) 如果部署文件改变

标签 java tomcat caching web-applications static-resource

我们试图强制客户端的浏览器在静态文件发生变化时重新加载它们。目前,我们的构建脚本会自动创建一个带有构建时间戳的新目录,并替换代码中的内容以指向该目录。

但是,我觉得这不是最佳解决方案。如果存在新构建,它会强制客户端浏览器加载每个文件,即使只有 1 个文件更改,构建时间也会因扫描每个文件并替换每个静态文件引用而显着增加。

我知道我们也可以在声明文件时设置版本(类似于 < link src="blahblah.css?version=1.1"/>),但这迫使我们更改所有代码以包含版本占位符和仍然有我们的构建脚本替换它。

有没有更聪明的方法来做到这一点?我们正在使用 Spring MVC。 mvc:resources 中是否有任何我不知道的选项可以在不更改代码的情况下执行此操作?或者 web.xml 上的东西?

我们正在使用 tomcat。有没有办法在服务器级别执行此操作?使用像 Varnish 之类的缓存会有所帮助吗?或者这些缓存只允许设置过期时间而不检查文件是否更改?请记住,我对服务器和缓存配置任务一点都不满意。

我发现了这个项目https://code.google.com/p/modpagespeed/,但由于它离我的舒适区很远,我很难理解它的功能,如果这个帮助我想要的东西。

有人有什么想法吗? 谢谢

最佳答案

您可以使用版本作为查询参数,例如/resources/foo.js?_version=1.0.0 .如果您使用 Maven,从 /META-INF/maven/{groupId}/{artifactId}/pom.properties 获取版本信息并不难.当然,这将强制重新加载每个新版本的所有脚本……但新版本可能不会经常部署。

那么正确设置 HTTP 缓存 header 始终是一个好习惯。 <mvc:resources>应该正确处理 Last-Modified标题给你。还有你can set cache-period 使浏览器更频繁地检查资源修改。

关于Java web app : Force browser to load static content (js, css, html) 如果部署文件改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25533797/

相关文章:

java - 如何知道所需的核心数和内存数?

ASP.NET session 缓存 - 单个项目过期

javascript - 每天更新网站变量

tomcat - 同时使用 SSL 和未加密运行 Spring Boot 应用程序(嵌入式 Tomcat)

google-chrome - 在本地开发期间停止缓存我的页面

c# - 有没有办法在实例化对象时隐藏/显示某些方法?

java - Spring 中的内容类型和@ResponseBody

java - 一对一映射的概念。解释映射

java - 执行错误 : java -Xms512M -Xmx1024M

java - Tomcat 连接器如何工作?