springboot版本:2.1.15.RELEASE
jquery版本:3.5.1
今天跟着老师学习springboot引入静态资源,老师写的行云流水,但是我第一步就卡着了,静态资源访问不到,网上找资料,看源码,终于把问题解决了。
因为我不是新建springboot项目,是在我原先的基础上做的,之前为了访问图片,我新增了一个静态资源配置类,导致静态资源自动配置失效,请看我的分析。
1,在https://www.webjars.org/
网站找到jquery的maven依赖。我使用的最新版本3.5.1
<dependency>
<groupId>org.webjars.bower</groupId>
<artifactId>jquery</artifactId>
<version>3.5.1</version>
</dependency>
maven更新完毕,你可以看到你的jquery包
在项目目录找到Externel Libraries,并打开,拉到最下面找到如图所示
很多同学会和我一样,访问jquery.js会报错(你首先检查一下是不是文件夹名字写错了),比如
不要急,可能你的和我问题一样,
查看源码(搜索此类WebMvcAutoConfiguration)得知,自动配置中有一个注解是@ConditionalOnMissingBean({WebMvcConfigurationSupport.class}),这个注解的意思是:在WebMvcConfigurationSupport.class这个类没有的情况下,才会走SpringBoot的Web自动配置,由于我代码中已经继承了WebMvcConfigurationSupport,所以自动配置失效了,我的代码如下:
难道配置了就无解了吗?No,No,No,接下来就是我写这个文章的目的,如果还使以前的有效,只需要加上如下代码即可:
你需要多少个就添加多少个,我这里只添加两个示例。
registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
registry.addResourceHandler("/webjars/**") .addResourceLocations("classpath:/META-INF/resources/webjars/");
代码位置如图:
运行代码,浏览器访问jquery.js,成功
同样,static下的静态文件也可以访问
如果上述方法不能解决你的问题,请看下面
之前是extends WebMvcConfigurationSupport类,我们修改为 实现WebMvcConfigurer类,既保留了所有的自动配置,也能用我们的扩展配置,真的超级智能,超级完美。推荐使用这个方法。
@Configuration // 表示这是个配置类
public class MyWebMvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/images/**").addResourceLocations("file:/D:/javaProject/upfile/");
WebMvcConfigurer.super.addResourceHandlers(registry);
}
}
至此,已经完美解决,希望你能一下子搜到我的文章,节约解决问题的时间。