1. 程式人生 > >SpringMVC引入靜態org.webjars中資源404

SpringMVC引入靜態org.webjars中資源404

首先對於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的問題!