私はSpring MVC 4.2.x
プロジェクトを持っています。 Webjarsロケータのdoesn - webjars-locator
:XMLベースのSpring MVC 4.2.x構成ではWebjars-locatorは機能しませんか?
<mvc:resources mapping="/webjars/**" location="/webjars/"/>
<mvc:annotation-driven/>
すべては一つのことを除いて正常に動作します:私は資源とannotation-driven
モードを設定しているcontext.xml
ファイルで
<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>
:私はXML
ベースの設定ファイルを経由して、それを構成していますすべての作業はです。
私は、間違って起こっているのかを理解するためにSpring MVCのソースに表情を開始し、見つけたそのResourceChainRegistration.getResourceResolvers()
クラスメソッドで追加されたのオブジェクトWebJarsResourceResolver
クラスを通じてwebjars-locator
作品。
フルシーケンスは次のようになります。それは次のように追加され
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
が登録されないのですか?
ハ:
Spring 4
ためそれがわずかに異なるマークアップを持っています!ですから、問題は ' 'のみであり、XMLで指定するこの明白な方法はわかりませんでした。これはまだwebjarの文書に記述されていない理由には答えませんが、問題を解決する方法として、私はそれを受け入れます! –
Andremoniy