Spring Boot中的静态资源

SSM 中的配置

我们回顾下在 SSM 环境搭建中,一般来说,我们可以通过 <mvc:resources /> 节点来配置防止springmvc对静态资源的拦截,如下:

<mvc:resources mapping="/js/**" location="/js/"/>
<mvc:resources mapping="/css/**" location="/css/"/>
<mvc:resources mapping="/html/**" location="/html/"/>

这是一种Ant风格的路径匹配符,/** 表示可以匹配任意层级的路径,因此上面的代码也可以像下面这样简写:

<mvc:resources mapping="/**" location="/"/>

这种配置是在 XML 中的配置,SpringMVC 的配置除了在XML中配置,也可以在 Java 代码中配置,如果在Java代码中配置的话,我们只需要自定义一个类,继承自WebMvcConfigurationSupport即可:

@Configuration
@ComponentScan(basePackages = "org.sang.javassm")
public class SpringMVCConfig extends WebMvcConfigurationSupport {
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**").addResourceLocations("/");
    }
}

重写 WebMvcConfigurationSupport 类中的addResourceHandlers方法,在该方法中配置静态资源位置即可

Spring Boot中配置静态资源

首先,在 Spring Boot 中,默认情况下,一共有5个位置可以放静态资源,五个路径分别是如下5个:

1、classpath:/META-INF/resources/
2、classpath:/resources/
3、classpath:/static/
4、classpath:/public/
5、/
结构图如下:
在这里插入图片描述
classpath:/META-INF/resources/下的页面内容

<h1>classpath:/META-INF/resources</h1>

classpath:/resources/下的页面内容

<h1>classpath:/resources/</h1>

classpath:/static/下的页面内容

<h1>classpath:/resources/static/</h1>

classpath:/public/下的页面内容

<h1>classpath:/public</h1>

/下的页面内容

<h1>/</h1>

/ 其实就是表示 webapp 目录中的静态资源
我们可以运行启动类,来看看首先访问的是哪一个页面的内容
在这里插入图片描述
虽然有5个存储目录,除了第5个用的比较少之外,其他四个,系统默认创建了 classpath:/static/ , 正常情况下,我们只需要将我们的静态资源放到这个目录下即可,也不需要额外去创建其他静态资源目录,例如我在 classpath:/static/ 目录下放了一个index.html 的页面,那么我的访问路径是:

http://localhost:8080/index.html

这里需要注意的是请求地址中并不需要 static,如果加上了static反而多此一举会报404错误。很多人会觉得奇怪,为什么不需要添加 static呢?资源明明放在 static 目录下。其实这个效果很好实现,例如在SSM配置中,我们的静态资源拦截配置如果是下面这样:

<mvc:resources mapping="/**" location="/static/"/>

如果我们是这样配置的话,请求地址如果是 http://localhost:8080/index.html实际上系统会去 /static/index.html目录下查找相关的文件。
下面简单来分析下路径查找的源码
在 WebMvcAutoConfiguration 类中看到了 SpringMVC 自动化配置的相关的内容,找到了静态资源拦截的配置,如下:
在这里插入图片描述
点进去看看获取到的这个地址参数是什么
在这里插入图片描述
这里获取到了/**的地址,再来看看另外一个
在这里插入图片描述
在这里插入图片描述
正好说的就是上面说的那五个地址,静态资源的匹配路径按照定义路径优先级依次降低。因此这里的配置和我们前面提到的如出一辙。这样大伙就知道了为什么Spring Boot 中支持5个静态资源位置,同时也明白了为什么静态资源请求路径中不需要/static,因为在路径映射中已经自动的添加上了/static了。

自定义配置

以上说的都是spring boot默认给我们提供的,当然我们也可以自定义配置,可以通过application.properties来定义
application.properties

spring.resources.static-locations=classpath:/user/

在这里插入图片描述
来看看页面输出结果
在这里插入图片描述
我们自定义的配置生效了,页面返回了我们自定义的页面内容

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值