SpringBoot静态资源处理(九)
二八佳人体似酥,腰间仗剑斩愚夫。虽然不见人头落,暗里教君骨髓枯。
上一章简单介绍了SpringBoot整合Druid(八),如果没有看过,请观看上一章
我们在编写WEB项目的时候,除了处理后端逻辑,包括业务逻辑和第三方插件等信息之外,还常常需要编写静态的资源信息。
静态信息,用于展示页面内容。
现在,公司基本都采用前后端分离,进行处理大中型项目。 但是小型的项目,或者我们的练习项目,通常采用的都是前后端不分离进行处理。
在SSM阶段的时候,我们会将静态的资源放置在 webapps/WEB-INFO 目录下, 放置在这个目录下的静态资源文件,
如 .html, .css,. js 可以直接访问。
SpringBoot 项目,只有一个 resources 目录放置相关的配置文件和静态资源,没有 WEB-INFO 目录,
那么应该放置在哪儿呢?
一. SpringBoot 提供的四种静态资源位置
按照以前的方式,创建一个 Static 的项目。
SpringBoot 默认提供了四种静态资源目录:
- classpath:/public/
- classpath:/static/
- classpath:/resources/
- 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静态资源处理(九)相关推荐
- 第14章 SpringBoot静态资源处理
第14章 SpringBoot静态资源处理 14.1 WebMvcAutoConfiguration的默认配置 14.2 自定义静态资源映射 14.3 前端资源的引用方法
- springBoot静态资源优先级)
springBoot静态资源优先级 springboot项目结构 默认优先级 自己设置指定某目录内文件为静态资源 springboot项目结构 默认优先级 /META-INF/resources> ...
- springboot 静态资源访问,和文件上传 ,以及路径问题
springboot 静态资源访问: 这是springboot 默认的静态资源访问路径 访问顺序依次从前到后(http://localhost:8080/bb.jpg) spring.resourc ...
- SpringBoot - 静态资源映射处理
SpringBoot - 静态资源映射处理 [1]静态资源文件映射规则 同样查看WebMVCAutoConfiguration源码如下: @Overridepublic void addResourc ...
- SpringBoot静态资源目录
SpringBoot静态资源目录 前言 今天博主将为大家分享SpringBoot静态资源目录!不喜勿喷,如有异议欢迎讨论! 以下所写内容均与以前的文章有联系可以前往博文查看,陈永佳的博客 之前的一系列 ...
- springboot 静态资源缓存设置
springboot 静态资源 js css 缓存设置 @Configuration public class WebMvcConfiguration implements WebMvcConfig ...
- springboot静态资源访问
springboot的项目中,默认的开启的静态资源目录有: classpath:/META-INF/resources/, classpath:/resources/, classpath:/stat ...
- springBoot静态资源处理
Spring Boot 静态资源处理 spring boot项目如果要展示静态页面,可以把html.js.css等文件放在resources目录下的static或public目录里面(如果没有可以直接 ...
- SpringBoot静态资源的映射
一, webjars 所有的webjars被导入后,目录结构都是这样的 : springboot的底层告诉我们 , 如果要引用webjars , 我们只需要在引用的位置使用 " /webja ...
- springboot静态资源的配置
1. springboot默认的静态资源存放路径 静态资源的存放路径为classpath,也就是resources目录下的: /META-INF/resources /resources /stati ...
最新文章
- 越来越多BCH全节点客户端对BCH意味着什么?
- (转)PHP EOF(heredoc)的使用方法
- 中石油oj 2654: 序列合并
- 求1-100之间的奇数和、偶数和
- python urllib模块学习笔记
- 【速来抢】iPhone12、STM32开发板、1024元现金红包…打包免费送!!!
- Uva 11218 - KTV
- 安卓http服务器源码,Android搭建HTTP和WebSocket的服务器端
- Java---集合类框架图
- 什么是Windows内核编程
- gbk与gb2312的区别是什么?
- 国稻种芯百团计划行动 丰收节贸促会·黎志康:惠及亚非18国家
- 求求你用数学炒股行不行?
- vue上传音视频文件并获取时长
- 学习python的记录1-通过if语句实现猜拳游戏
- linux钉钉-使用playonlinux 可以使用视频会议
- 作为一名大学生,为什么会直接选择IT培训?IT培训有什么好处?
- js调用android.webkit,h5调用原生App的方法合集 window.webkit.messageHandlers
- 如何在eclipse中写jsp文件
- PM必备 | 4种基本素质和8大管理技能