SpringMVC引入靜態org.webjars中資源404
阿新 • • 發佈:2018-12-27
首先對於webjars的介紹這裡不多說,直接去官網檢視說明,官網地址 http://www.webjars.org
問題出現原因:
在瞭解Spring整合websocket時幾乎所有的demo中都是使用的webjars的方式引入靜態資源,而且示例中所有的資源配置都是通過程式碼實現,這裡我著重說明在xml配置中,webjars出現404的問題。
通過http://www.webjars.org/documentation#springmvc官網說明了解基本的配置,一定注意專案中使用servlet版本,到底2.X還是3.X,通過官網的配置,基本通過
是完全可以找到資源的,但是此種方式不利於版本的更新、替換,還有另外一種方式可以在使用中脫離版本的依賴,就是如下方式<link rel='stylesheet' href='/webjars/bootstrap/3.1.0/css/bootstrap.min.css'>
<link rel='stylesheet' href='/webjars/bootstrap/css/bootstrap.min.css'>
但是你會發現在xml中按照官網的配置,還是一直出現404的問題,官網配置說明寧如下
注意“When using Spring Framework version 4.2 or higher, it will automatically detect the webjars-locator
library
on the classpath and use it to automatically resolve the version of any WebJar assets for you ”這段說明,它大概的意思是如果你用的spring4.2+的版本,那麼spring會自動對資源的路徑進行解析,那麼通過上面的方式引入資源就不會出現404,然並卵!!!,這裡我們在看一下通過純java程式碼是如何實現的。程式碼如下
網上很多的例項都是通過上面的方式進行載入的,一定要注意@Configuration @EnableWebMvc public class WebConfig extends WebMvcConfigurerAdapter { @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); } @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/webjars/**").addResourceLocations("/webjars/") .resourceChain(false) .addResolver(new WebJarsResourceResolver()) .addResolver(new PathResourceResolver()); } }
.addResolver(new WebJarsResourceResolver())
這一行,這是明確的在配置webJars的資源解析器,而官網上恰恰沒有做這塊配置的說明,導致雖然引入了依賴包,但是通過
<link rel='stylesheet' href='/webjars/bootstrap/css/bootstrap.min.css'>
這種方式引入靜態資源還是會出現404的情況。
解決辦法:
1、如果你是使用的純java程式碼進行配置,那麼通過上面的程式碼就已經可以。
2、如果你是通過xml檔案的方式進行配置,配置如下:
<mvc:resources mapping="/webjars/**" location="classpath:/META-INF/resources/webjars/">
<mvc:resource-chain resource-cache="false" auto-registration="false">
<mvc:resolvers>
<bean class="org.springframework.web.servlet.resource.WebJarsResourceResolver"></bean>
<bean class="org.springframework.web.servlet.resource.PathResourceResolver"></bean>
</mvc:resolvers>
</mvc:resource-chain>
</mvc:resources>
注意我的servelet版本是2.X,如果你的是3.x那麼location="classpath:/META-INF/resources/webjars/"會有所差異,其他沒有變化,通過上述配置你在使用webjars的資源時,既可以不依賴,也不會再出現404的問題!