spring停止使用Java缓存文件
我试图避免缓存我的自定义js文件,因为我经常更改它们,而客户端缓存旧的js文件
所以我正在尝试一个解决方案(http://www.baeldung.com/cachable-static-assets-with-spring-mvc),但它不起作用。它根本不会像预期的那样更改js文件的名称
我使用的是SpringMVC5
WebMVCConfiguer
@Configuration
@EnableWebMvc
public class MvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler()
.setCacheControl(CacheControl.maxAge(1, TimeUnit.SECONDS))
.resourceChain(false)
.addResolver(new VersionResourceResolver().addContentVersionStrategy("/**"));
}
}
HTML
<script type="text/javascript" src="<c:url value="../resources/js/pageJS/login.js" />"></script>
网络。xml
<filter>
<filter-name>resourceUrlEncodingFilter</filter-name>
<filter-class>
org.springframework.web.servlet.resource.ResourceUrlEncodingFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>resourceUrlEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
知道你在干什么吗
../resources/js/pageJS/login.js
保持相同的名称
# 1 楼答案
在控制器类的请求映射方法中尝试以下操作:-
# 2 楼答案
添加过期或缓存控制标头
标签:服务器
这条规则有两个方面:
网页设计越来越丰富,这意味着页面中有更多的脚本、样式表、图像和Flash。首次访问您的页面的访问者可能需要发出多个HTTP请求,但通过使用Expires标头,可以使这些组件可缓存。这避免了后续页面视图中不必要的HTTP请求。Expires头文件通常与图像一起使用,但它们应该用于所有组件,包括脚本、样式表和Flash组件
浏览器(和代理)使用缓存来减少HTTP请求的数量和大小,从而加快网页加载速度。web服务器在HTTP响应中使用Expires头告诉客户端组件可以缓存多长时间。这是一个遥远的Expires标题,告诉浏览器此响应在2010年4月15日之前不会过时
如果您的服务器是Apache,请使用ExpiresDefault指令设置相对于当前日期的过期日期。ExpiresDefault指令的这个示例将Expires日期设置为从请求时算起10年
请记住,如果您使用的是far future Expires标头,则每当组件发生更改时,都必须更改组件的文件名。在雅虎!我们通常将此步骤作为构建过程的一部分:在组件的文件名中嵌入一个版本号,例如yahoo_2.0.6。js
使用far future Expires标头仅在用户已访问您的站点后才会影响页面视图。当用户第一次访问您的站点并且浏览器的缓存为空时,它对HTTP请求的数量没有影响。因此,这种性能改进的影响取决于用户使用预处理缓存访问页面的频率。(一个“预处理缓存”已经包含页面中的所有组件。)我们在雅虎测量了这个!并发现使用预处理缓存的页面浏览量为75-85%。通过使用far future Expires标头,可以增加浏览器缓存并在后续页面视图中重复使用的组件数量,而无需通过用户的Internet连接发送单个字节
利用浏览器缓存
当PageSpeed Insights检测到来自服务器的响应不包括缓存头,或者如果资源被指定为仅在短时间内缓存,则会触发此规则
概述
通过网络获取资源既慢又贵:下载可能需要在客户端和服务器之间进行多次往返,这会延迟处理并可能阻止页面内容的呈现,同时也会给访问者带来数据成本。所有服务器响应都应指定缓存策略,以帮助客户端确定是否以及何时可以重用以前获取的响应
推荐
每个资源都应该指定一个明确的缓存策略,以回答以下问题:资源是否可以缓存,由谁缓存,缓存多长时间,以及在缓存策略过期时如何有效地重新验证。当服务器返回响应时,它必须提供缓存控制和ETag头:
要确定站点的最佳缓存策略,请使用以下指南:
我们建议静态资产或不经常更改的资产的缓存时间至少为一周,最好为一年。如果您需要精确控制资源何时失效,我们建议使用URL指纹或版本控制技术-请参阅上面的失效和更新缓存响应链接
# 3 楼答案
似乎你需要使用
而不是
取决于登录的位置。js文件
另外,将1秒改为30秒,给Spring一些喘息的空间:)