java之如何在 Java Web 应用程序中自动化静态文件(css、js、图像)的版本控制

unruledboy 阅读:66 2023-08-30 22:41:59 评论:0

我想最有效地使用静态文件的浏览器缓存,即始终使用缓存的内容,除非文件已更改,在这种情况下获取新内容。

我想将文件的 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> 


标签:CSS
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号