Spring MVC VersionResourceResolver/ContentVersionStrategy在JSP中无法正常工作 [英] Spring MVC VersionResourceResolver / ContentVersionStrategy not working correctly in JSP
问题描述
我有一个Spring MVC(4.3.0)应用程序,并已向ResourceHandlerRegistry注册了一个带有ContentContentionStrategy的VersionResourceResolver.我启用了ResourceUrlEncodingFilter.
I have a Spring MVC (4.3.0) application and have registered a VersionResourceResolver with added ContentVersionStrategy with the ResourceHandlerRegistry. I have the ResourceUrlEncodingFilter enabled.
@Bean
public ResourceUrlEncodingFilter resourceUrlEncodingFilter() {
return new ResourceUrlEncodingFilter();
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
boolean devMode = this.env.acceptsProfiles("local");
//boolean useResourceCache = !devMode;
Integer cachePeriod = devMode ? 0 : (60 * 60 * 24 * 365); //If dev clear cache else 1 year
registry.addResourceHandler("/resources/**")
.addResourceLocations("/resources/")
.setCachePeriod(cachePeriod)
.resourceChain(false)
.addResolver(new VersionResourceResolver()
.addContentVersionStrategy("/**"))
.addTransformer(new AppCacheManifestTransformer());
}
当我使用c:url或spring:url标记访问JSP页面上的/resources中的任何内容(JS,图像,CSS等)时,版本化" URL不显示(表示:中没有哈希码) URL).示例:
When I access anything in /resources (JS, Images, CSS, etc) on a JSP page using the c:url or spring:url tags, the "versioned" URL does not show up (meaning: no hash code in the URL). Example:
<link href="<c:url value="/resources/css/views/login.css" />" rel="stylesheet">
在检查页面时产生:/myapp/resources/css/views/login.css作为URL字符串.
Produces: /myapp/resources/css/views/login.css as the URL string when inspecting the page.
但是,如果我在Controller中使用ResourceURLProvider,则 做 会看到URL中的哈希码:
But, if I use a ResourceURLProvider in my Controller, I do see the hash code in the URL:
@Autowired
private ResourceUrlProvider mvcResourceUrlProvider;
@RequestMapping(value = { "/" }, method = RequestMethod.GET)
public String projectBaseRedirect() {
logger.debug("js = '" + this.mvcResourceUrlProvider.getForLookupPath("/resources/js/views/overview.js") + "'");
logger.debug("css = '" + this.mvcResourceUrlProvider.getForLookupPath("/resources/css/views/overview-page.css") + "'");
return "redirect:/admin/overview";
}
日志消息产生以下信息:
The log messages produce this:
2016-07-09 11:47:19 DEBUG AdminLoginController:35 - js = '/resources/js/views/overview-36d1ff98d627d92a72d579eca49dbd8a.js'
2016-07-09 11:47:19 DEBUG AdminLoginController:36 - css = '/resources/css/views/overview-page-d47f10e5bcf0fdd67bd8057479b523f0.css'
为什么这在控制器中起作用,但在我的JSP页面上却不起作用?
Why is this working in the controller but not on my JSP pages?
我也在使用Spring Security(4.1.0)...
I am also using Spring Security (4.1.0)...
推荐答案
由于示例中缺少它,因此项目中也可能缺少它.您需要使用的模板引擎资源提供程序.如果是JSP,请注册一个过滤器:
As it is missing in your example it is maybe missing in your project as well. You need a resource provider for the template engine you're using. In case of JSP, register a filter:
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Bean
public ResourceUrlEncodingFilter resourceUrlEncodingFilter() {
return new ResourceUrlEncodingFilter();
}
}
或将过滤器注册bean与该过滤器一起使用:
Or use a filter registration bean with that filter:
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Bean
public FilterRegistrationBean filterRegistrationBean() {
final FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new ResourceUrlEncodingFilter());
filterRegistrationBean.addUrlPatterns("/*");
return filterRegistrationBean;
}
}
这篇关于Spring MVC VersionResourceResolver/ContentVersionStrategy在JSP中无法正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!