- 1.SpringMVC自动配置概览 —autoConfiguration概念
- 2.静态资源访问目录 + 访问路径前缀 + webjars + 欢迎页 的使用
- 3.上面四种功能的原理
1.SpringMVC自动配置概览 —autoConfiguration概念
2.静态资源访问目录 + 访问路径前缀 + webjars + 欢迎页 的使用
访问静态资源可以使用路径前缀,但是访问欢迎页不能使用路径前缀 如果出现了任何情况的不合理的情况,就清除浏览器缓存 + 重建项目
2.1 静态资源访问目录:spring.resources.static-locations
注意,访问的时候是不加静态目录的。但是可以加路径前缀
2.1.1 静态资源访问目录
- 有如下四种: /static /public /resources /META-INF/resources
- 代码测试验证
- 也可以去官方文档查看验证
2.1.2 访问流程:controller -> 静态目录
一个请求进来时,先去找Controller,看能不能处理。
不能处理的所有请求又都交给静态资源处理器。静态资源也找不到则响应404页面
静态映射/**
2.1.3 改变静态资源目录:
官方文档给出的方法
代码测试 - 失败代码
成功代码
2.2 给请求路径增加前缀:spring.mvc.static-path-pattern
2.3 webjack访问
2.3.1 什么是webjars?
- 就是css,html打成的一个jar包,比如jquery就是一个webjars
- 官网文档说法
2.3.2 代码测试
找到webjars,并且导入依赖
访问该jquery文件
注意,路径上必须加上 /webjars
2.4 两个小功能:欢迎页+标签上的小图标
默认是静态资源目录下的index.html,访问的时候直接 localhost:8080 即可。 注意,访问欢迎页不能设置访问前缀
2.4.1 欢迎页的两种设置方法(index.html必须放在静态资源目录下,而且不能有访问前缀)
2.4.2 小图标
必须放到静态资源目录下
3.上面四种功能的原理
即为什么静态资源有四个目录?为什么可以直接访问欢迎页?为什么可以加前缀?都是怎么起作用的?
3.1 先看看WebMvcAutoConfiguration
看一下主要配置类:WebMvcAutoConfiguration,下面是他的实现类的构造方法,这个方法有一些参数(主要看xxProperties两个参数)
加载的时候,这些参数是会自动的从容器里拿。
3.2 静态资源访问目录 + 路径前缀 + webjars 的原理:addResourceHandlers(),
这个方法除了说明了 静态资源规则,也说明了 /webjars的规则。 还说明了pattern机制(即请求路径前缀原则)
3.2.1 方法内容:
1.调用了ResourceProperties类(xxxProperties,顾名思义)里的isAddMappings()(此方法作用:查看静态资源映射是否开启,默认是true(开启))
静态路径是否生效取决于,resourceProperties类里的addMapping属性是true(生效)还是false
如果在配置文件里面设置addMapping为false,就是关闭映射。则静态路径不再生效
怎么查看addMapping的值呢?通过isAddMappings()方法。(类似于set,get方法)
下面是方法的具体内容(不看也行)
ResourceProperties里的 isAddMappings()
2.然后又调用了自身的addResourceHandler(),目的是,设置webjars和静态资源目录
而他又调用了mvcProperties#getStaticLocations(),目的是获取四种静态资源目录
方法的具体实现:不看也行
getStaticLocations():作用其实就是返回写死的4个静态资源的目录。
getStaticPathPattern()
默认是 /**,可以被修改
2.核心功能
getStaticPathPattern()默认是 /**,可以被修改
3.2.2 另一个addResourceHandle():webjars和静态资源目录的具体实现。
不重要,忽略了。不过这里面有 设置缓存。
聊一下这个缓存,下面红框里的整个方法结果就是返回ResourceProperties里的成员变量period。既然是这个类的成员变量,所以可以在配置文件中设置
单位是秒,这个方法就是设置 静态资源在浏览器里的缓存时间,比如上面的11000秒,这个意思是浏览器会自动保存静态资源11000s,即使刷新也不会重新去服务器里再次请求静态资源。(通俗点说就是拿了服务器资源保存一定时间,这段时间内不管如果请求都不会再拿,而是用缓存的。)
3.3 看下欢迎页的处理规则 welcomePageHandlerMapping()
看代码,从容器里面拿了一堆参数,然后又new 了一个welcomePageHandlerMapping,传给了他一堆参数,其中就有 mvcProperties.getStaticPathPattern()(即请求前缀,默认是“/**”)