我想最有效地使用静态文件的浏览器缓存,即始终使用缓存的内容,除非文件已更改,在这种情况下获取新内容。
我想将文件的 md5 哈希值附加到客户端看到的虚拟文件路径(作为目录或文件名的一部分),以便当文件更改时,客户端认为它发生了变化是不同的资源。
我知道如何使用 servlet 过滤器来获取包含该虚拟文件路径的请求并剥离 md5 哈希值,并返回目录结构中的真实文件名。
我是否还可以使用过滤器来更改出路时的表观文件名,以便客户端的浏览器认为它正在请求虚拟文件路径,而不更改我的实际文件的实际名称或目录结构?
例如:
真实文件路径 =/css/1.css
虚拟文件路径 =/static/1234/css/1.css
当文件改变时
真实文件路径 =/css/1.css
虚拟文件路径 =/static/3451/css/1.css
最佳答案
如果您使用Maven,您可以添加这个很棒的插件:Minify Maven Plugin 。它与您的问题没有直接关联,但您可以使用 ${version} 将 CSS/JS 文件的最终名称与应用程序的版本连接起来(您应该能够在您的进口)。 每次构建应用程序的新版本时,您都应该有新的 CSS/JS 文件(按新版本号)并强制浏览器再次下载它。
示例:
<plugin>
<groupId>com.samaxes.maven</groupId>
<artifactId>minify-maven-plugin</artifactId>
<version>1.7.4</version>
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>minify</goal>
</goals>
</execution>
</executions>
<configuration>
<webappSourceDir>${basedir}/src/main/webapp/</webappSourceDir>
<webappTargetDir>${basedir}/src/main/webapp/</webappTargetDir>
<charset>UTF-8</charset>
<cssSourceDir>css</cssSourceDir>
<cssSourceFiles>
<cssSourceFile>style.css</cssSourceFile>
</cssSourceFiles>
<cssTargetDir>css</cssTargetDir>
<!-- Your final CSS file -->
<cssFinalFile>style.final.${version}.css</cssFinalFile>
<jsSourceDir>js</jsSourceDir>
<jsSourceFiles>
<jsSourceFile>script.js</jsSourceFile>
</jsSourceFiles>
<jsTargetDir>js</jsTargetDir>
<!-- Your final JS file -->
<jsFinalFile>script.final.${version}.js</jsFinalFile>
<jsEngine>CLOSURE</jsEngine>
</configuration>
</plugin>
关于java - 如何在 Java Web 应用程序中自动对静态文件(css、js、图像)进行版本控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28471458/