如何在Java web应用程序中自动控制静态文件(css、js、image)的版本
How to automate versioning of static files (css, js, image) in a Java web app
我想最有效地使用静态文件的浏览器缓存,即始终使用缓存的内容,除非文件发生了更改,在这种情况下,获取新内容。
我想将文件的md5哈希附加到客户端看到的虚拟文件路径(作为目录或文件名的一部分),这样当文件更改时,客户端就会认为它是不同的资源。
我知道如何使用servlet过滤器接收包含该虚拟文件路径的请求,去掉md5哈希,并在目录结构中返回真实的文件名。
我是否也可以在离开时使用过滤器更改明显的文件名,以便客户端的浏览器认为它正在请求虚拟文件路径,而不更改实际文件的实际名称或目录结构?
例如:
真实文件路径=/css/1.css
虚拟文件路径=/static/1234/css/1.css
当文件更改时
真实文件路径=/css/1.css
虚拟文件路径=/static/3451/css/1.css
如果您正在使用Maven,您可以添加这个很棒的插件:Minify Maven插件。它与您的问题没有直接联系,但您可以使用${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>
相关文章:
- css/js:通过滚动固定位置
- 什么CSS/JS技巧驱动镜像反转http://com.google愚人节页面
- CSS/js Flip Cards
- 将回车键映射到HTML/CSS/JS中的按钮
- CSS/.JS问题,<ul><李>在Megamenu中
- 最小化CSS/JS文件,并使用命令行创建一个文件
- 使用公共JS文档优化静态网站的CSS/JS导入
- HTML/CSS/JS切换不同的谷歌日历是同一个框架
- 使用 PHP 将 css/js 文件分配给 html 文档
- HTML/CSS/JS 构建工具
- Knockout.js在标头中绑定css/js库
- 如何在HTML/CSS/JS中为表/列表应用行虚拟化
- 当包含在CSS/JS/HTML中时,我如何得出正确的目录路径
- 这段代码有什么问题(responsible html-css-js)
- CSS/JS:如何在悬停时显示文本,并显示点击href的文本框
- 如何使css/js对象在所有浏览器上都相同
- html+css+js组合在Google Chrome或Safari浏览器中无法正常工作
- CSS/JS转换:translate3d和滚动-在Android上流畅,在iPhone上没有动力
- 使用CSS/JS反转和重新反转元素
- 将复杂的html/css/js元素添加到单个Wordpress页面中