Bootstrap

静态资源访问

基本介绍

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/"]
;