二八佳人体似酥,腰间仗剑斩愚夫。虽然不见人头落,暗里教君骨髓枯。

上一章简单介绍了SpringBoot整合Druid(八),如果没有看过,请观看上一章

我们在编写WEB项目的时候,除了处理后端逻辑,包括业务逻辑和第三方插件等信息之外,还常常需要编写静态的资源信息。
静态信息,用于展示页面内容。

现在,公司基本都采用前后端分离,进行处理大中型项目。 但是小型的项目,或者我们的练习项目,通常采用的都是前后端不分离进行处理。

在SSM阶段的时候,我们会将静态的资源放置在 webapps/WEB-INFO 目录下, 放置在这个目录下的静态资源文件,
如 .html, .css,. js 可以直接访问。

SpringBoot 项目,只有一个 resources 目录放置相关的配置文件和静态资源,没有 WEB-INFO 目录,
那么应该放置在哪儿呢?

一. SpringBoot 提供的四种静态资源位置

按照以前的方式,创建一个 Static 的项目。

SpringBoot 默认提供了四种静态资源目录:

  1. classpath:/public/
  2. classpath:/static/
  3. classpath:/resources/
  4. classpath:/META-INF/resources/

优先级依次升高。 即,如果在四个目录下都放置相同的文件名称的静态文件,访问时,会优先展示 /META-INF/resources下的文件内容。

一.一 public 目录文件

在public 目录下,创建两个静态资源,一个是 b.html, 一个是 bc.css 文件

b.html 文件:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>B</title>
</head>
<body>
我是 /public 目录下的文件,我叫岳泽霖,一个快乐的程序员
</body>
</html>

bc.css 文件:

p{height:100px;color:blue;
}

进行查询展示:

一.二 static 目录文件

在 static 目录下, 创建一个 a.html 文件

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>C</title>
</head>
<body>我是 /static 目录下的文件,我岳泽霖,热爱生活,追求快乐
</body>
</html>

进行访问:

也可以放置图片信息,在 static目录下创建 img 目录,下面放置一个 self.png 的图片

进行访问:

如果写成 self.png, 没有这个图片的话:

记住这个展示的页面信息,这是SpringBoot 默认的 404 页面。

一.三 resources 目录文件

在 resources 目录下创建两个文件, c.html 和 cj.js 文件

c.html:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>C</title>
</head>
<body>我叫周小欢,一个可爱的小姑娘
</body>
</html>

cj.js:

alert("Two Butterfly");

进行访问:

一.四 META-INF.resources 目录下文件

META-INF.resources 目录下创建一个 d.html 的文件

d.html:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>D</title>
</head>
<body>我是 META-INF.resources 目录下的文件,我叫周小欢,一个新加入的成员。
</body>
</html>

一.五 当各个资源目录下存在相同的文件名称时,访问优先级

静态资源的默认访问优先级:/META-INF/resources/>/resources/>/static/>/public/

在 public 目录下创建一个静态资源, huan.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Public目录</title>
</head>
<body>我是Public目录下的资源信息
</body>
</html>

在 static 目录下,也创建 huan.html 的静态文件

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Static目录</title>
</head>
<body>我是Static目录下的资源信息
</body>
</html>

进行访问时:

static 目录的文件优先级高于 Public 的目录文件

在 resources 目录下,创建 huan.html 的静态文件:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>resources目录</title>
</head>
<body>我是resources目录下的资源信息
</body>
</html>

resources目录的文件优先级高于 static 的目录文件

在 META-INF.resources 目录下创建文件 huan.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>META-INF/resources目录</title>
</head>
<body>我是META-INF/resources目录下的资源信息
</body>
</html>

可以发现, META-INF.resources 目录下的文件优先级最高。

二. 自定义资源目录处理

我们在实际项目中,常常看到 使用 templates 目录文件。

在 templates 目录下 放置 index.html 和一个图片 timg/self.jpg

index.html:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>主页</title>
</head>
<body>
<p>不管什么时候,总会还有人记得,周小欢和岳泽霖的故事</p>
</body>
</html>

无论是: http://localhost:8081/Static/index.html

还是 http://localhost:8081/Static/tempaltes/index.html

都无法进行访问到相关的资源,会报 404 资源找不到。

这是因为 /templates 目录并不是SpringBoot提供的默认的静态资源, 需要进行相关的配置。

有两种常见的方式,进行处理

二.一 继承 WebMvcConfigurerAdapter 接口进行配置

在 controller 同级目录下 创建 config 包,config 包下创建 MvcConfig 类

二.一.一 全局配置

package top.yueshushu.learn.config;import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;/*** @ClassName:MvcConfig* @Description TODO* @Author zk_yjl* @Date 2021/6/29 16:31* @Version 1.0* @Since 1.0**/
@Configuration
public class MvcConfig extends WebMvcConfigurerAdapter {/*** 配置静态的资源信息* @param registry*/@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/**"  //路径是 /** ).addResourceLocations("classpath:/templates/"   //对应的目录是  templates目录);}
}

resourceHandler 表示的是请求的路径, resourceLocations 表示的是该请求路径对应的资源目录信息, 是一一对应的,

可以同时注册多个。

重新启动项目:

输入路径: http://localhost:8081/Static/index.html

发现,可以访问到 templates/index.html 文件内容了。

此时,注意,以前的 SpringBoot提供的默认的四种目录无法访问到

二.一.二 指定路径配置

访问 index.html 时,没有使用任何路径前缀,这是因为 addResourceHandler 使用的是 /**

也可以进行指定

@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {/* registry.addResourceHandler("/**").addResourceLocations("classpath:/templates/");*/registry.addResourceHandler("/yjl/**"   //对应路径的路径是  yjl/).addResourceLocations("classpath:/templates/"  //目录是  templates);}

前面添加了 /yjl/ 目录

直接输入

会发现,报 404

需要添加 /yjl 路径前缀才可以


注意此时:

访问原先的SpringBoot提供的那四种默认目录下的文件,是可以访问的。

addResourceHandler 的值 已经不是 /** 了,就不会替换默认的了,当配置了 /**时,就会将SpringBoot默认提供的替换。

二.一.三 配置多个路径

再新创建两个目录 s1, s2

  @Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {/* registry.addResourceHandler("/**").addResourceLocations("classpath:/templates/");*/registry.addResourceHandler("/yjl/**"   //对应路径的路径是  yjl/).addResourceLocations("classpath:/templates/"  //目录是  templates);registry.addResourceHandler("s1/**"   //目录s1).addResourceLocations("classpath:/s1/");registry.addResourceHandler("s2/**")   //目录s2.addResourceLocations("classpath:/s2/");}

进行访问:

通常采用的是这一种方式

二.二 配置文件进行配置资源信息

先在 MvcConfig 类中,去掉 @Configuration 注解。

在 application.yml 配置文件的 spring目录下,添加配置信息(只放置spring目录相关的配置信息)

# 引入 数据库的相关配置
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/springboot?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=trueusername: rootpassword: abc123type: com.alibaba.druid.pool.DruidDataSource#配置资源信息mvc:static-path-pattern: /yjl/** #配置信息,不要忘记 /**表示,任意多层目录resources:static-locations: [classpath:/templates]   # 写一个的话,会将以前的全部覆盖掉。

重启项目,发现

s1.html 无法访问到

SpringBoot提供的默认目录文件无法访问到

直接 index.html 无法访问到

最前面添加 yjl 之后,才可以访问到。

static-locations 可以配置多个

# 引入 数据库的相关配置
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/springboot?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=trueusername: rootpassword: abc123type: com.alibaba.druid.pool.DruidDataSource#配置资源信息mvc:static-path-pattern: /**    # 原先的会清除掉resources:static-locations: [classpath:/templates,classpath:/s1,classpath:/s2,classpath:/public,classpath:/static]   # 配置多个

这个时候, s1目录,s2目录,templates目录, public目录,static目录均可以进行访问。

但是 resources目录并没有配置,所以无法访问到(不知道为什么,d.html竟然可以访问到)。
b可以访问到:

c无法访问到:

通常采用第一种方式进行配置资源信息。

本章节的代码放置在 github 上:

https://github.com/yuejianli/springboot/tree/develop/Static

谢谢您的观看,如果喜欢,请关注我,再次感谢 !!!

SpringBoot静态资源处理(九)相关推荐

  1. 第14章 SpringBoot静态资源处理

    第14章 SpringBoot静态资源处理 14.1 WebMvcAutoConfiguration的默认配置 14.2 自定义静态资源映射 14.3 前端资源的引用方法

  2. springBoot静态资源优先级)

    springBoot静态资源优先级 springboot项目结构 默认优先级 自己设置指定某目录内文件为静态资源 springboot项目结构 默认优先级 /META-INF/resources> ...

  3. springboot 静态资源访问,和文件上传 ,以及路径问题

    springboot 静态资源访问: 这是springboot 默认的静态资源访问路径  访问顺序依次从前到后(http://localhost:8080/bb.jpg) spring.resourc ...

  4. SpringBoot - 静态资源映射处理

    SpringBoot - 静态资源映射处理 [1]静态资源文件映射规则 同样查看WebMVCAutoConfiguration源码如下: @Overridepublic void addResourc ...

  5. SpringBoot静态资源目录

    SpringBoot静态资源目录 前言 今天博主将为大家分享SpringBoot静态资源目录!不喜勿喷,如有异议欢迎讨论! 以下所写内容均与以前的文章有联系可以前往博文查看,陈永佳的博客 之前的一系列 ...

  6. springboot 静态资源缓存设置

    springboot 静态资源 js css  缓存设置 @Configuration public class WebMvcConfiguration implements WebMvcConfig ...

  7. springboot静态资源访问

    springboot的项目中,默认的开启的静态资源目录有: classpath:/META-INF/resources/, classpath:/resources/, classpath:/stat ...

  8. springBoot静态资源处理

    Spring Boot 静态资源处理 spring boot项目如果要展示静态页面,可以把html.js.css等文件放在resources目录下的static或public目录里面(如果没有可以直接 ...

  9. SpringBoot静态资源的映射

    一, webjars 所有的webjars被导入后,目录结构都是这样的 : springboot的底层告诉我们 , 如果要引用webjars , 我们只需要在引用的位置使用 " /webja ...

  10. springboot静态资源的配置

    1. springboot默认的静态资源存放路径 静态资源的存放路径为classpath,也就是resources目录下的: /META-INF/resources /resources /stati ...

最新文章

  1. 越来越多BCH全节点客户端对BCH意味着什么?
  2. (转)PHP EOF(heredoc)的使用方法
  3. 中石油oj 2654: 序列合并
  4. 求1-100之间的奇数和、偶数和
  5. python urllib模块学习笔记
  6. 【速来抢】iPhone12、STM32开发板、1024元现金红包…打包免费送!!!
  7. Uva 11218 - KTV
  8. 安卓http服务器源码,Android搭建HTTP和WebSocket的服务器端
  9. Java---集合类框架图
  10. 什么是Windows内核编程
  11. gbk与gb2312的区别是什么?
  12. 国稻种芯百团计划行动 丰收节贸促会·黎志康:惠及亚非18国家
  13. 求求你用数学炒股行不行?
  14. vue上传音视频文件并获取时长
  15. 学习python的记录1-通过if语句实现猜拳游戏
  16. linux钉钉-使用playonlinux 可以使用视频会议
  17. 作为一名大学生,为什么会直接选择IT培训?IT培训有什么好处?
  18. js调用android.webkit,h5调用原生App的方法合集 window.webkit.messageHandlers
  19. 如何在eclipse中写jsp文件
  20. PM必备 | 4种基本素质和8大管理技能

热门文章

  1. WIN7安装启动盘制作并支持usb3.0
  2. mysql建三行三列表格_制作好的表格怎样才可以成重新编辑
  3. R语言学习记录:array()函数
  4. np.array()函数
  5. java文档生成器_最好用的数据库文档生成工具
  6. NPS, 校外连接校园网
  7. 幕布笔记按字母顺序导出(Python+Opml)
  8. RK3399外设驱动之MIPI显示-panel配置
  9. stm32毕业设计 单片机车牌识别系统
  10. du命令排序文件大小