通过向javascript和css添加更新,我想避免强迫用户按Ctrl + F5刷新缓存的js和css文件。

禁用缓存也不是明智之举。

为此,我想像这样向js和css链接添加版本

< link href="~/CSS/file.css?MY_VERSION" rel="stylesheet" />


理想情况下,版本必须类似于构建日期和时间的构建编号。
但是如何自动设置呢?

我不想在每次更新后在所有jsp文件中手动更新此值。
所以问题是


Maven可以将构建版本添加到JSP文件吗?
如果无法进行第一点操作,如何(在何处)使用当前日期和时间设置应用程序全局变量?例如,我不能将其放入servlet,因为它是每个请求都构造的。
什么是最佳做法?也许我的方法是完全错误的

最佳答案

是的,我们做类似的事情(对于css文件中的图像引用):

<plugin>
    <groupId>com.google.code.maven-replacer-plugin</groupId>
    <artifactId>maven-replacer-plugin</artifactId>
    <version>1.4.1</version>
    <executions>
        <execution>
            <id>anticache</id>
            <phase>prepare-package</phase>
            <goals>
                <goal>replace</goal>
            </goals>
            <configuration>
                <includes>
                    <include>target/classes/**/*.css</include>
                </includes>
                <replacements>
                    <replacement>
                        <token>anti-cache=anti-cache-parameter</token>
                        <value>anti-cache=${maven.build.timestamp}</value>
                    </replacement>
                </replacements>
            </configuration>
        </execution>
    </executions>
</plugin>


只需检查文件模式以匹配您的JS文件,然后在您的JS文件中:

< link href="~/CSS/file.css#anti-cache=anti-cache-parameter" rel="stylesheet" />


请注意,这里我不使用请求参数(?),而是使用#。这是为了避免浏览器缓存受到影响,因为使用请求参数,浏览器缓存将挂接到文件的每个版本。另请参阅:Refresh image with a new one at the same url

现在,如上所述,我们使用了它,但是它也不是理想的解决方案,但是我认为不存在理想的解决方案。

另请参阅在不同浏览器中进行缓存的行为:
https://github.com/podlipensky/RefreshButton

09-11 08:40
查看更多