您的位置:首页 > 编程语言 > Java开发

SpringMVC引入静态org.webjars中资源404

2016-12-04 00:44 190 查看
首先对于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的问题!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息