java web 不用框架 静态资源配置_9springboot处理Web静态资源

springboot处理Web静态资源

以前的JavaWeb/maven(war形式)项目都是把静态资源放在webapps/WebContent目录下,然后把JavaWeb项目打包成war包,那现在的springboot都是jar包形式,那么静态资源放在哪里?

springboot通过WebMvcAutoConfiguration类可以知道默认的静态资源路径 以及 指定静态资源的存放路径,接下来进入WebMvcAutoConfiguration类,去了解静态资源默认的存放路径和手动配置静态资源路径的两种方式。

静态资源默认路径

静态资源默认路径分为两种,第一种是以webjars目录结构类似的默认路径,第二种是springboot默认指定的静态资源存放路径。

第一种webjars目录结构是通过WebMvcAutoConfiguration类中的addResourceHandlers()方法指定: /webjars/**,如下图:

d1e38732fc1753e31cadf8ac12ee74ca.png

webjars是一个静态资源打包成jar包的形式(比如:jquery/boostrap这些框架,封装成了jar包),也就是依赖,可以去webjars官网看看。

然后进行测试webjars,是否能够符合springboot的 第一种默认资源路径,而且可以访问到,如下图:

cc6fec85db16c5b5051281ac391e958b.png

可以发现添加了jquery依赖后,会自动下载jar包,而且jar包的目录结构,符合springboot通过WebMvcAutoConfiguration类中的addResourceHandlers()方法指定的 :"classpath:/META-INF/resources/webjars/" 路径,所以可以直接通过/webjars/**路径去访问该静态资源,第一种webjars目录结构是可以访问成功的,如下图:

7017815aad06417ff2a511d31366356a.png

但是我们自己写的静态资源,目录结构肯定不是webjars这样的结构,那么这些静态资源该怎么访问到呢,而且应该放哪里,接下来就 继续深入WebMvcAutoConfiguration类,去寻找 第二种springboot默认指定的静态资源路径。

第二种springboot默认指定的静态资源路径,还是在WebMvcAutoConfiguration类中,可以找到声明的默认静态资源路径,如下图:

ad9ca809d54718ae7fd39ed9c4c5335b.png

还是在addResourceHandlers()方法中可以发现,resourceProperties类调用了getStaticLocations()方法,看这个方法的名称就知道是获取静态资源路径了,可知道resourceProperties类存储着springboot默认指定的静态资源路径,再次进入到resourceProperties类中,查看源码,如下图:

3cb862e3adb928ef2902818a3c327e3a.png

可以发现springboot默认指定的静态资源路径一共有4个路径,分别是:

classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/"

classpath:就是类路径,程序能识别的路径,一般文件夹有这种图标

3d8e9e524127849c7ff58321ffac249d.png (这是idea版的图标)就是classpath路径。

而且springboot默认创建项目就有了static文件夹,如下图:

61ba802b204fcf8c056c9d8e4c4ba232.png

这里的resources有了类路径的图标(代表 resource 就是 classpath路径),所以底下的static路径就是springboot默认的静态资源路径,或者自己在resource目录下创建一个public文件夹,在里面也是可以存放静态资源的,创建的文件夹位置和名字必须符合springboot声明的静态资源路径一致。

注意: 在springboot默认指定的静态资源路径 存放资源文件后,访问时 不需要加默认的静态资源路径前缀,直接访问即可,如下图:

b72791ecf863ec5df96e46350d4d5327.png

额外:我们访问springboot项目时,如果直接访问localhost,会显示如下图:

39863440c4a39f9f53dd605b8cf5f326.png

很明显springboot默认是没有欢迎页面的,但是我们可以自定义欢迎页面,欢迎页面的设置也是在WebMvcAutoConfiguration类中可以找到,如下图:

ed8a0808a14784aaa86c90ed851a9f78.png

可以发现welcomePageHandlerMapping()方法调用了 getWelcomePage()方法,从该方法名就可以知道,该方法是获取欢迎页面的,接下来进入getWelcomePage()方法内继续查看,如下图:

c50a8a00d5410ba1e61821be30b0c878.png

可以发现getWelcomePage()还继续调用了getIndexHtml()方法,从上图可以看到该方法体内,拼接了 location 和 index.html,一般主页都是采用index.html来命名,而可以推测出location应该是存放主页的位置,而当前的location是一个变量,所以得看回getWelcomePage()方法,因为是这个方法传递的location变量,上图有getWelcomePage()方法,上图的435行代码就可以猜到getIndexHtml()方法的location就是springboot默认的静态资源路径,因为getResourceLocations()方法就是返回springboot默认的静态资源路径。

String[] locations = getResourceLocations(this.resourceProperties.getStaticLocations());

所以可以知道,只要在默认的静态资源路径存放一个名为:index.html的文件,访问localhost时,就会默认访问index.html这个主页,接下来,我测试一下,如下图:

688110ab12c8c2be0ba0f8829c82925e.png

可以发现测试成功,访问localhost时,会自动访问index.html页面。

自定义默认静态资源路径

除了可以把文件放在默认的静态资源路径之外,还可以自定义默认的静态资源路径,配置自定义静态资源目录,当然得在全局配置文件中配置(properties/yml)。

spring.resources.static-locations=classpath:/res/,classpath:/test/

可以配置多个路径,注意:只要配置spring.resources.static-locations属性,那么以前默认的静态资源路径就失效了,测试一下,如下图:

c74f0d07fa00558a22ee096aa033437c.png

配置过默认的静态资源路径后,默认的static静态资源路径就失效了。

上面配置了res路径为静态资源路径,再测试一下,配置是否生效了,如下图:

f427ae40cc9a865a51aa7c2d9ec1b552.png

可以发现,默认的静态资源路径配置已经生效了。

The end.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值