我有一个Spring MVC 4.2.x
项目。我通过XML
基于配置文件中配置它:Webjars-locator不支持基于XML的Spring MVC 4.2.x配置?
<servlet>
<servlet-name>foo</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
在context.xml
文件我已经配置资源和annotation-driven
模式:
<mvc:resources mapping="/webjars/**" location="/webjars/"/>
<mvc:annotation-driven/>
,一切工作正常,除了一两件事:webjars-locator
- Webjars定位器没有按根本不工作。
我已经开始看到Spring MVC来源,以了解发生了什么错误,并发现,webjars-locator
作品通过WebJarsResourceResolver
类,它的对象是在ResourceChainRegistration.getResourceResolvers()
类方法添加。
的全序列的样子:
WebMvcConfigurationSupport.resourceHandlerMapping()
>>ResourceHandlerRegistration.getHandlerMapping()
>>ResourceHandlerRegistration.getRequestHandler()
>> ResourceChainRegistration.getResourceResolvers()
,在那里它被添加为:
if (isWebJarsAssetLocatorPresent) {
result.add(new WebJarsResourceResolver());
}
的问题,是基于XML配置的情况下,如上所述,该序列不被调用,都不使用WebMvcConfigurationSupport
类。
而且,如果我添加
@EnableWebMvc
@Configuration
public class WebConfig {
}
到项目,WebMvcConfigurationSupport
明显的作品,但在ResourceHandlerRegistration.getHandlerMapping()
:
protected AbstractHandlerMapping getHandlerMapping() {
if (registrations.isEmpty()) {
return null;
}
...
}
registrations
是空的!
毕竟,只有一个办法如何强行让春天增添WebJarsResourceResolver
到解析器链是:
1)从context.xml
和
2删除<mvc:resources mapping="/webjars/**" location="/webjars/"/>
)添加addResourceHandlers
到WebConfig
:
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry
.addResourceHandler("/webjars/**")
.addResourceLocations("/webjars/")
.setCachePeriod(3600)
.resourceChain(true) // !!! very important
;
}
我的问题是:我做错了什么?为什么XML基础配置不会导致WebJarsResourceResolver
被注册?
哈!所以问题只存在于',我不知道用XML指定它的明显方式,谢谢!这仍然没有回答为什么它不在webjar文档中描述的问题,但我接受它,因为它以所需的方式解决问题! –
Andremoniy