java之如何在 Java Web 应用程序中自动化静态文件(css、js、图像)的版本控制
我想最有效地使用静态文件的浏览器缓存,即始终使用缓存的内容,除非文件已更改,在这种情况下获取新内容。
我想将文件的 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>
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。