Редактировать
В случае, если вы используете Spring бутсу это теперь намного проще, чтобы предотвратить кэширование измененных файлов.
Все, что вам нужно сделать, это добавить это 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>
Это как включить ваши статические ресурсы в заголовке.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>
Нужно ли им загружать каждую загрузку страницы или просто когда вы делаете новый выпуск? –
Да, почему в мире вы хотели бы * предотвратить * кэширование своего статического контента? Это как полная противоположность тому, что люди обычно делают. – Pointy
@Nick Craver & Pointy: Может быть, он отлаживает и не хочет очищать кеш каждый раз? Это все, что я могу понять. – Robusto