9springboot处理Web静态资源

摘要:
Spring boot处理Web静态资源。以前,JavaWeb/maven项目将静态资源放在webapps/WebContent目录中,然后将JavaWeb项目打包成war包。现在,spring boot是jar包的形式。静态资源在哪里?静态资源的默认路径静态资源的缺省路径分为两种类型。第一个是类似于webjars目录结构的默认路径。第二个是默认情况下由spring-boot指定的静态资源存储路径。
springboot处理Web静态资源

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

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

静态资源默认路径

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

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

image-20200828003319492

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

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

image-20200828110815620

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

image-20200828111442771

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

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

image-20200828181037190

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

image-20200828181549550

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

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

classpath:就是类路径,程序能识别的路径,一般文件夹有这种图标 image-20200828204543628 (这是idea版的图标)就是classpath路径。

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

image-20200828204811416

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

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

image-20200828210007854

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

image-20200828210341865

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

image-20200828211016963

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

image-20200828211401406

可以发现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这个主页,接下来,我测试一下,如下图:

image-20200828213655734

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

自定义默认静态资源路径

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

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

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

image-20200828232035936

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

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

image-20200828232308042

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

The end.

免责声明:文章转载自《9springboot处理Web静态资源》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇admin的基础配置zabixx安装下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

第十章 内部类1

说明:内部类和组合是完全不同的概念,内部类看起来更像是一种代码隐藏机制。内部类了解外围类,并能与之通信。要创建一个内部类是非常简单的,只要将一个类定义在另一个类的内部即可。 创建内部类对象的方式: 1.如果内部类为公有、静态内部类: packagethink.in.java.test; /*** 一个包裹着公有的、静态的、内部类的外部类 * @aut...

Spring MVC与JAXRS比较与分析

http://www.infoq.com/cn/articles/springmvc_jsx-rs 过去几年,REST逐渐成为影响Web框架、Web协议与Web应用设计的重要概念。如果你还不了解REST,那这个简短的介绍将有助你快速掌握REST,此外还可以点击这里了解关于REST的更多信息。 现在有越来越多的公司希望能以简单而又贴合Web架构本身的方式公开...

[JavaWeb]SpringSecurity-OAuth2.0 统一认证、资源分离的配置,用于分布式架构、模块化开发的认证体系

前言 关于 OAuth2.0的认证体系,翻阅了好多资料,RCF 文档太多,看了一半就看不下去了,毕竟全英文的文档看起来,是有一点让我烦躁,但也对 OAuth2.0的认证流程有了一个基本的概念,之前用 SpringSecurity 做了一个基于 RBAC 的权限管理系统的基础配置,所以对 SpringSecurity 算是比较了解了,于是 OAuth2.0...

MFC的简单加法器(二)

   创建对话框主要分两大步,第一,创建对话框资源,主要包括创建新的对话框模板、设置对话框属性和为对话框添加各种控件;第二,生成对话框类,主要包括新建对话框类、添加控件变量和控件的消息处理函数等。鸡啄米在本节中先讲讲怎样创建对话框模板和设置对话框属性。        创建基于对话框的应用程序框架        之前鸡啄米创建的HelloWorld程序是单文...

JVM 详解

1 jdk  和jre 的区别     jre 石 Java 运行环境,只能运行 class 不能编辑 Java文件,不能dubug。  2  jdk下面的  bin/jconsole.exe 监控 一些内存,线程,jvm 。 3 Java 的 层级 ,以前我们关注的是三面 三次。jvm 是最下面一层    4 Java的  作者是  詹姆斯·高斯林   ...

Java高级框架-----Spring(一)

一: 1.Spring几大核心功能: IOC/DI 控制反转/依赖注入 AOP 面向切面编程 声明式事务 2.Spring 框架的的runtime 2.1test:Spring提供测试功能 2.2Core Container:核心容器。Spring启动最基本条件 2.2.1Beans:Spring负责创建类对象并管理对象 2.2.2Core:核心类 2.2...