我们在Web应用程序中有一堆.js文件,它们不在一个目录下.UI是单独开发的,重新设计它以将所有*.js文件放在一个地方非常耗时.
问题是这些文件被浏览器缓存很多,这会给每次应用程序更新带来很多问题.我们决定关闭这些文件的缓存.
因此,*.js文件包含在servlet映射中:
<servlet-mapping>
<servlet-name>app</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
我尝试过使用mvc:resources但是它不会像这样处理url的掩码:
<mvc:resources mapping="*.js" location="*.js" cache-period="0"/>
Run Code Online (Sandbox Code Playgroud)
这不起作用,当我尝试访问js文件时,我有404响应.
我也试过mvc:拦截器:
<mvc:interceptor>
<mvc:mapping path="*.js"/>
<bean id="webJSContentInterceptor"
class="org.springframework.web.servlet.mvc.WebContentInterceptor">
<property name="cacheSeconds" value="0"/>
<property name="useExpiresHeader" value="true"/>
<property name="useCacheControlHeader" value="true"/>
<property name="useCacheControlNoStore" value="true"/>
</bean>
</mvc:interceptor>
Run Code Online (Sandbox Code Playgroud)
这也导致404错误.
这类事可能吗?
我意识到这个答案来得相当晚,但这是为了将来的参考.
首先,你走在正确的轨道上<mvc:resources>,你的路径模式声明只有一个错字:
location一定情况下,您的资源生活的一个文件夹位置(这可能是你的文件系统上,在你的web应用资源,在类路径中,在webJARs ...)假设你有以下结构:
src/main/webapp/static/
|- js/
|- js/lib/jquery.js
|- js/main.js
|- css/style.css
Run Code Online (Sandbox Code Playgroud)
您可以像这样提供所有静态资源:
<mvc:resources mapping="/**" location="/static/"/>
Run Code Online (Sandbox Code Playgroud)
注意:cache-period其他属性应该可以正常工作.
从Spring 4.1开始,有一些新的,更灵活的方法可以解决这个问题.
例如,您可以使用以下JS和CSS文件实现缓存清除:
<mvc:resources mapping="/**" location="/static/"/>
<mvc:resource-chain resource-cache="true">
<mvc:resolvers>
<mvc:version-resolver>
<mvc:content-version-strategy patterns="/**"/>
</mvc:version-resolver>
</mvc:resolvers>
</mvc:resource-chain>
</mvc:resources>
Run Code Online (Sandbox Code Playgroud)
当然你可以用javaconfig实现同样的东西(更优雅):
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
VersionResourceResolver versionResolver = new VersionResourceResolver()
.addContentVersionStrategy("/**");
registry.addResourceHandler("/**")
.addResourceLocations(/static/)
.resourceChain(true).addResolver(versionResolver);
}
Run Code Online (Sandbox Code Playgroud)
这不可能。但有几种选择:
| 归档时间: |
|
| 查看次数: |
5027 次 |
| 最近记录: |