编辑
如果您使用的是 Spring Boot,现在防止缓存修改的文件要简单得多。
您需要做的就是将其添加到 application.properties 中:
spring.resources.chain.strategy.content.enabled=true
spring.resources.chain.strategy.content.paths=/**
如果您使用的是 Thymeleaf 或 FreeMarker,它是完全自动配置的。如果您使用 JSP,则需要手动声明 ResourceUrlEncodingFilter。
在此处阅读更多信息:http :
//docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-web-applications.html#boot-features-spring-mvc-static-content
现在接下来是我的“旧”帖子,它也有效,但需要更多的工作。
由于您使用的是 Java,因此您也有可能使用 maven 来管理您的项目。
在这种情况下,为了提高性能,并确保在您的软件的新版本发布时没有浏览器缓存您的静态资源,您应该将所有样式表和 JavaScript 文件合并到它们类型的单个文件中,并且您应该在创建新版本时更改资源 url。
幸运的是,maven 可以在构建时为您完成所有这些工作。你需要minify-maven-plugin
和maven-replacer-plugin
。
这个 pom.xml 的摘录应该让你开始:
<properties>
<timestamp>${maven.build.timestamp}</timestamp>
<maven.build.timestamp.format>yyyyMMddHHmm</maven.build.timestamp.format>
</properties>
<plugin>
<groupId>com.samaxes.maven</groupId>
<artifactId>minify-maven-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<id>minify-css</id>
<phase>process-resources</phase>
<goals>
<goal>minify</goal>
</goals>
<configuration>
<linebreak>-1</linebreak>
<cssSourceDir>resources/css</cssSourceDir>
<cssSourceFiles>
<cssSourceFile>bootstrap.css</cssSourceFile>
<cssSourceFile>style.css</cssSourceFile>
</cssSourceFiles>
<cssTargetDir>resources/css</cssTargetDir>
<cssFinalFile>${timestamp}.css</cssFinalFile>
</configuration>
</execution>
<execution>
<id>minify-js</id>
<phase>process-resources</phase>
<goals>
<goal>minify</goal>
</goals>
<configuration>
<linebreak>-1</linebreak>
<jsSourceDir>resources/js</jsSourceDir>
<jsSourceFiles>
<jsSourceFile>jquery.js</jsSourceFile>
<jsSourceFile>bootstrap.js</jsSourceFile>
<jsSourceFile>script.js</jsSourceFile>
</jsSourceFiles>
<jsTargetDir>resources/js</jsTargetDir>
<jsFinalFile>${timestamp}.js</jsFinalFile>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.google.code.maven-replacer-plugin</groupId>
<artifactId>replacer</artifactId>
<version>1.5.2</version>
<executions>
<execution>
<id>replaceDynPartInResourcePath</id>
<phase>prepare-package</phase>
<goals>
<goal>replace</goal>
</goals>
<configuration>
<ignoreMissingFile>false</ignoreMissingFile>
<basedir>${project.build.directory}</basedir>
<file>${project.artifactId}/WEB-INF/views/header.jsp</file>
<regex>false</regex>
<replacements>
<replacement>
<token>$dynamicResourceNamePart$</token>
<value>${timestamp}</value>
</replacement>
</replacements>
</configuration>
</execution>
</executions>
</plugin>
这是在 header.jsp 中包含静态资源的方法
<c:choose>
<c:when test="${not fn:contains(pageContext.request.serverName, 'localhost') and empty param.nocombine}">
<link href="${pageContext.request.contextPath}/resources/css/$dynamicResourceNamePart$.min.css" rel="stylesheet" type="text/css" />
<script src="${pageContext.request.contextPath}/resources/js/$dynamicResourceNamePart$.min.js" type="text/javascript"></script>
</c:when>
<c:otherwise>
<link href="${pageContext.request.contextPath}/resources/css/bootstrap.css" rel="stylesheet">
<link href="${pageContext.request.contextPath}/resources/css/style.css" rel="stylesheet">
<script type="text/javascript" src="${pageContext.request.contextPath}/resources/js/jquery.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/resources/js/bootstrap.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/resources/js/script.js"></script>
</c:otherwise>
</c:choose>