基本介绍
1.只要静态资源放在类路径下:/static、/public、/resources、/META-INF/resources可以被直
接访问-对应文件WebProperties.java源码
private static final String[] CLASSPATH_RESOURCE_LOCATIONS={"classpath:/META-INF/resources/","classpath:/resources/","classpath:/static/","classpath:/public/"};
2.常见静态资源:JS、CSS、图片(.jpg .png .gif .bmp .svg)、字体文件(Fonts)等
3.访问方式:默认:项目根路径/+静态资源名 比如 http://localhost:8080/hi.jpg,
-通过设置WebMvcProperties.java可以设置添加工程路径
private String staticPathPattern ="/**"
注意事项
静态资源文件需要放在指定的4个目录中的一个,才能直接访问。不要想当然的放在java自带的resources下,就以为能访问了
还要检查程序运行后,target目录下是否生成了对应的静态文件,否则路径对了也访问不到。
在maven里面双击运行LifeCycle-clean,重置target目录,这样更可靠
细节
1.静态资源访问原理:静态映射是/**,也就是对所有请求拦截,请求进来,先看Controller能不能处理,不能处理的请求交给静态资源处理器,如果静态资源找不到则响应404页面
2. 当出现controller与静态资源重名时,会发生冲突,导致只能访问controller的页面,访问不到静态资源。可以通过给静态资源设置前缀的方式来避免冲突。
在resource下新建application.yml,名字不能乱取
最后依然要/**来扫描拦截
spring:
mvc:
static-path-pattern: /prefix/**
3. 可以自己配置资源文件夹。设置如下:
spring:# 同上,重复删除。这儿写出来是为了显式体现层级关系
web:
resources:
static-locations: [classpath:/custom/]
4. 因为源码是采用赋值的方式,而不是添加的方式修改设置,会导致原来可用的4个文件夹失效。如果要继续使用原来的资源文件夹,需要自己重新写上,可通过Ctrl+b的方式进入源码,复制添加原有类路径设置即可
spring:# 同上,重复删除。这儿写出来是为了显式体现层级关系
web:
resources:
static-locations: ["classpath:/custom/","classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/"]