我们在Web应用程序中有一堆.js文件,它们不在一个目录下。 UI是单独开发的,重新设计它以将所有* .js文件放在一个地方非常耗时。
问题是浏览器缓存了这些文件,这会给每次应用程序更新带来很多问题。我们决定关闭这些文件的缓存。
因此,* .js文件包含在servlet映射中:
<servlet-mapping>
<servlet-name>app</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
我尝试过使用mvc:resources,但它不会像这样处理url的掩码:
<mvc:resources mapping="*.js" location="*.js" cache-period="0"/>
当我尝试访问js文件时,这不起作用,我有404响应。
我也试过mvc:interceptor:
<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>
这也会导致404错误。
这类事可能吗?
答案 0 :(得分:6)
我意识到这个答案来得相当晚,但这是为了将来参考。
首先,您使用<mvc:resources>
走在正确的轨道上,您的路径模式声明中只有一个拼写错误:
location
必须是资源所在的文件夹位置(可以在您的文件系统,您的webapp资源,类路径,webJAR中...)让我们说你有以下结构:
src/main/webapp/static/
|- js/
|- js/lib/jquery.js
|- js/main.js
|- css/style.css
您可以像这样提供所有静态资源:
<mvc:resources mapping="/**" location="/static/"/>
注意: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>
当然,您可以使用javaconfig实现相同的功能(更优雅):
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
VersionResourceResolver versionResolver = new VersionResourceResolver()
.addContentVersionStrategy("/**");
registry.addResourceHandler("/**")
.addResourceLocations(/static/)
.resourceChain(true).addResolver(versionResolver);
}
有关详情,请参阅此blog post和this example app。
答案 1 :(得分:2)
这是不可能的。但有几种选择:
答案 2 :(得分:0)
据我说,问题是你的JS文件没有被加载。 在第二种方法中,您尝试过没有正确指定路径属性的值。映射是正确的,但代替了您需要指定JS文件所在根目录的确切位置的路径。
尝试这样做。希望这会对你有所帮助。