gpt4 book ai didi

java - 以 Java/Maven 方式使用 URL 指纹管理积极缓存

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:53:13 26 4
gpt4 key购买 nike

我正在尝试寻找最佳解决方案来管理浏览器缓存以在 Java/Maven 项目中重新加载修改后的 JavaScript/CSS 资源。最普遍的解决方案似乎是 Maven 过滤以在构建时向资源 URL 添加时间戳。例如:

<script type="text/javascript" src="resource.js?v=${maven.build.timestamp}"></script>

但最有效的方法是添加文件的校验和/哈希(又名指纹)而不是构建日期,这样资源就不会在每次部署后重新加载,而只会在必要时重新加载。我正在拼命寻找使用 Java 或 Maven 插件正确/通用地实现此模型的方法。

有什么想法吗?

谢谢。

最佳答案

您确实想要使用指纹识别与查询参数。查询参数方法并不总是有效,大多数代理不会缓存它。更改 URL 或实际文件名效果更好。

下面是我在 Maven、Git、Tomcat、Dojo 项目中处理这个问题的方法。我用 http://mojo.codehaus.org/buildnumber-maven-plugin/获取我的 Git 版本。然后在构建我的 WAR 时使用过滤将值注入(inject)我的 JSP。

pom.xml

    <plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
<configuration>
<doCheck>false</doCheck>
<doUpdate>false</doUpdate>
<shortRevisionLength>8</shortRevisionLength>
<revisionOnScmFailure></revisionOnScmFailure>
</configuration>
</plugin>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<warName>${project.name}-${project.version}-${buildNumber}</warName>
<webResources>
<resource>
<directory>src/main/webapp/WEB-INF/views/includes</directory>
<targetPath>WEB-INF/views/includes</targetPath>
<filtering>true</filtering>
</resource>
</webResources>
......
</configuration>
</plugin>

在我的主要 JSP 中,我有

<script src="${pageContext.request.contextPath}/${buildNumber}/static/js/ckeditor/ckeditor.js"></script>
<script src="${pageContext.request.contextPath}/${buildNumber}/static/js/build/dojo/dojo.js" data-dojo-config="parseOnLoad: true"></script>

为了重写我正在使用 http://tuckey.org/urlrewrite/ .我只有一个简单的规则。

我的第一个过滤器入口 web.xml

<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
<init-param>
<param-name>logLevel</param-name>
<param-value>WARN</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>

urlrewrite.xml

<rule match-type="regex">
<from>^/[0-9A-Za-z_.\-]+/static/(.*)$</from>
<to>/static/$1</to>
</rule>

关于java - 以 Java/Maven 方式使用 URL 指纹管理积极缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15478385/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com