您确实想使用指纹与查询参数。查询参数方法并不总是有效,大多数代理不会缓存它。更改 URL 或实际文件名效果更好。
下面是我在 Maven、Git、Tomcat、Dojo 项目中处理这个问题的方法。我使用http://mojo.codehaus.org/buildnumber-maven-plugin/来获取我的 Git rev。然后在构建我的 WAR 时使用过滤将值注入我的 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://tukey.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>