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

    xiaoxiao2021-12-14  19

    首先对于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的问题!

    转载请注明原文地址: https://ju.6miu.com/read-971899.html

    最新回复(0)