存放的四个位置
"classpath:/META-INF/resources/"
"classpath:/resources/"
"classpath:/static/"
"classpath:/public/"
如果要访问的话,是当前项目的根路径+静态资源名。
因为这个图片的名称是favicon.ico
,因此在访问网站的时候,在页面的左上角,会出现一个小图标。
原理: 静态映射/**。
请求进来,先去找Controller看能不能处理。不能处理的所有请求又都交给静态资源处理器。静态资源也找不到则响应404页面,因此,如果请求和静态资源同名的话,先处理请求。
优先级
优先级:resources>static>public
我们可以在resources根目录下新建对应的文件夹,都可以存放我们的静态文件;
比如我们访问 http://localhost:8080/1.js , 他就会去这些文件夹中寻找对应的静态资源文件;
静态资源在这四个路径下的原因。
SpringBoot启动默认加载 xxxAutoConfiguration 类(自动配置类)。SpringMVC功能的自动配置类 WebMvcAutoConfiguration生效
给容器中配置了下面这个组件
配置文件的相关属性和xxx进行了绑定。WebMvcProperties=spring.mvc,ResourceProperties=spring.resources
点开WebProperties,我们会发现其中的静态的静态的资源路径已经默认的给配好了。
不过我们可以会静态资源的默认路径进行更改。
自定义静态资源路径
我们也可以自己通过配置文件来指定一下,哪些文件夹是需要我们放静态资源文件的,在application.properties中配置:
一旦自己定义了静态文件夹的路径,原来的自动配置就都会失效了!
静态资源访问前缀的问题
这在springboot中同样是有默认配置的。
点开WebMvcProperties,在其中我们可以找到下面这个属性
因此在springboot中是没有配置访问前缀的,我们可以自己配置。
当前项目 + static-path-pattern + 静态资源名 = 静态资源文件夹下找,在这里修改了静态资源的访问位置和访问前缀,我们是可以是可以访问的,但是如果是访问欢迎页的话,是可能出现错误的。
没有加前缀的情况下。
加了前缀的情况下。
是访问不了欢迎页的。
我们来看看其中的原因。
点开WebMvcAutoConfiguration这个类,我们可以找一下处理欢迎页请求的Handlermapping。
点开WelcomePageHandlerMapping,我们可以看到在这个类的代码中对是否请求欢迎页进行了判断。
从第一个if我们可以看出来,一旦我们修改了前缀的话,就不会访问到欢迎页了。
关于webjar的一些知识。
springboot已经配置了当我们访问为jar包的时候,会自动映射 /webjars/**这个路径。
我们可以在后面直接访问。
http://localhost:8080/webjars/jquery/3.5.1/jquery.js
上面的自动映射在源码中也已经写好了。