Spring Boot——静态资源

发布时间 2024-01-06 22:36:34作者: DoubleLi

目录

一、什么是静态资源?

二、使用静态资源

第一种:使用webjars

使用

第二种:将静态资源文件放至静态资源文件夹

第三种:自定义静态资源路径

三、首页处理

结语


 

一、什么是静态资源?

 

一般客户端发送请求到web服务器,web服务器从内存在取到相应的文件,返回给客户端,客户端解析并渲染显示出来。

例如:css,js等文件。

 

二、使用静态资源

 

第一种:使用webjars

 

SpringBoot中,SpringMVC的web配置都在 WebMvcAutoConfiguration 这个配置类里面,默认为我们提供了静态资源处理。

我们进入WebMvcAutoConfigurationAdapter源码里面进行查看,发现有这么一个方法:

 

addResourceHandlers 添加资源处理;

 

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
        if (!this.resourceProperties.isAddMappings()) {
// 已禁用默认资源处理
        logger.debug("Default resource handling disabled");
        return;
        }
// 缓存控制
        Duration cachePeriod = this.resourceProperties.getCache().getPeriod();
        CacheControl cacheControl = this.resourceProperties.getCache().getCachecontrol().toHttpCacheControl();
// webjars 配置
        if (!registry.hasMappingForPattern("/webjars/**")) {
        customizeResourceHandlerRegistration(registry.addResourceHandler("/webjars/**")
        .addResourceLocations("classpath:/META-INF/resources/webjars/")
        .setCachePeriod(getSeconds(cachePeriod)).setCacheControl(cacheControl));
        }
// 静态资源配置
        String staticPathPattern = this.mvcProperties.getStaticPathPattern();
        if (!registry.hasMappingForPattern(staticPathPattern)) {
        customizeResourceHandlerRegistration(registry.addResourceHandler(staticPathPattern)
        .addResourceLocations(getResourceLocations(this.resourceProperties.getStaticLocations()))
        .setCachePeriod(getSeconds(cachePeriod)).setCacheControl(cacheControl));
        }
        }

 

分析:

 

所有的 /webjars/** , 都需要去 classpath:/META-INF/resources/webjars/ 找对应的资源;

 

 

什么是webjars 呢?

 

Webjars本质就是以jar包的方式引入我们的静态资源 

 

 

使用

 

当我们需要使用某一个静态资源时,只需要去以下的网站查找相对应的版本,然后将其导入即可。

网站:WebJars - Web Libraries in Jars

 

例如:

我们现在需要使用jQuery这个静态资源,那么我们前往官网查找。

 

我们将其对应的Maven依赖复制到pom.xml中

 <dependency>
        <groupId>org.webjars</groupId>
        <artifactId>jquery</artifactId>
        <version>3.4.1</version>
    </dependency>


导入完毕后,我们去查看webjars目录结构。


 




正如上面源码分析知道,所有的 /webjars/** , 都需要去 classpath:/META-INF/resources/webjars/ 找对应的资源;
 

那么我们现在去访问Jquery.js文件。

注意:只要是静态资源,SpringBoot就会去对应的路径(classpath:/META-INF/resources/webjars/ )寻找资源

 


浏览器访问:http://localhost:8080/webjars/jquery/3.4.1/jquery.js

 


 

 


访问成功! 

 

 

第二种:将静态资源文件放至静态资源文件夹

 

源码:

依旧是在WebMvcAutoConfiguration.class类中,我们进行查看:

那我们点进去看一下这是给我们配置到哪里去了呢?

 

 


 

图片续:

 

经过一路跟踪,终于找到,springboot为我们自动配置的静态资源位置是如下几个:classpath:/MATA-INF/resources/、classpath:/resources/、classpath:/public/、classpath:/static/这几个位置,无论我们把静态资源放到这几个的哪一个都可以访问到。
 

也就是说以下四个目录存放的静态资源可以被我们识别:  

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


我们可以在resources根目录下新建对应的文件夹,都可以存放我们的静态文件

例如:
 

 


接着我们去访问该静态资源:


http://localhost:8080/hello.js
 




访问成功!
 


第三种:自定义静态资源路径



我们可以通过application.properties配置文件来指定一下,哪些文件夹是需要我们放静态资源文件的。

 


(1)编写配置文件


application.properties:

spring.web.resources.static-locations=classpath:/yixin/,classpath:/king/


我们定义了两个存放静态资源的目录:yixin和king


(2)创建目录
 

 



(3)测试



访问成功!!

 

注意一旦自己定义了静态文件夹的路径,原来的自动配置就都会失效了!

 



三、首页处理

 



我们去查看一下WebMvcAutoConfigurationAdapter的源码,发现有以下方法:



 

 

也是就是说当我们启动SpringBoot的时候,去访问http://localhost:8080/,那么就会去找静态资源文件夹下的 index.html。

 

我们进行测试一下

 

(1)编写index.html并放在任意的静态资源文件夹中

 

 

(2)index.html

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
</head>
<body>
你好呀,我是一心同学。
</body>
</html>


(3)访问http://localhost:8080/
 

访问成功!


 

结语

以上就是一心同学对SpringBoot中Web的静态资源的知识整理,静态资源的访问会在我们进行WEB开发中经常使用的,务必掌握其访问的方法。