一文搞清楚静态资源和拦截器 —— Java面试必修
引言
接触一个web项目,首先要确认的就是入口,所以静态资源和拦截器在项目中是架构级的,在第五章我们整合了Thymeleaf模块,初次认识了SpringBoot对静态资源的默认支持。今天我们来继续学习SpringBoot中如何合理的存放静态资源,如何根据我们自身需要来进行扩展资源和拦截器的扩展。
在接下来的文章中,我在末尾处会公布源码,源码将托管在码云上
静态资源
工具
SpringBoot版本:2.0.4
开发工具:IDEA 2018
Maven:3.3 9
JDK:1.8
在web开发中,静态资源的访问是必不可少的,如:图片、js、css 等资源的访问。
Spring Boot 对静态资源访问提供了很好的支持,基本使用默认配置就能满足开发需求,Spring Boot 对静态资源映射提供了默认配置:
自动映射 localhost:8080/** 为
classpath:/META-INF/resources
classpath:/resources
classpath:/static
classpath:/public
自动映射 localhost:8080/webjars/** 为
classpath:/META-INF/resources/webjars/
依据1类推
小实验:分别在4个文件夹下放置同名不同内容的图片,然后根据访问情况记录图片内容,访问 http://localhost:8080/a.png,然后一张张图片进行删减
你会发现这些路径的优先级顺序为:META-INF/resources > resources > static > public,即默认先找第一个文件夹,如果找到了,那么就直接取那张,否则接着找第二个文件夹,依此类推
实验图
此时,我们不需要多作些什么,只需要将静态资源放入 src/main/resources 目录下的 resources、static 或 public 文件夹下,可直接通过localhost:8080/a.jpg 定位相关资源,不要问为什么,因为这4个目录都是SpringBoot作为(默认)的静态资源路径
自定义静态资源映射
在实际开发中,可能需要自定义静态资源访问路径,那么可以继承[WebMvcConfigurerAdapter | WebMvcConfigurer ] 或 更改配置文件来实现
一、代码配置
在旧版中,一般继承 WebMvcConfigurerAdapter类,但由于2.0后,前者已经过时,WebMvcConfigurer 接口中定义了很多default方法(基于jdk1.8+ ),所以2.0后实现WebMvcConfigurer接口就好了。注:使用代码实现不会覆盖系统默认4种方式(同名定义除外)
SpringBoot 1.x写法
@Configuration
public class CustomerMvcConfigurerAdapter extends WebMvcConfigurerAdapter {
@Override
public v