| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> SpringBoot之Web开发(静态资源配置原理) -> 正文阅读 |
|
[Java知识库]SpringBoot之Web开发(静态资源配置原理) |
SpringBoot之Web开发(静态资源、欢迎页面、Favicon) 前文讲解了SpringBoot中静态资源、欢迎页面、Favicon都是如何使用的,本文将简洁静态资源的配置原理。 1、找到WebMvcAutoConfiguration SpringMVC功能的自动配置类 WebMvcAutoConfiguration。与MVC有关的东西SpringBoot中都是通过WebMvcAutoConfiguration进行配置的。 下面我们打开WebMvcAutoConfiguration来查看源码,看看静态资源配置原理。 在左侧导航栏External Libraries中点开,如下所示 ?在org.springframework.boot.autoconfigure文件夹中找到web目录,在web目录中找到WebMvcAutoConfiguration并进入查看源码。 ?2、WebMvcAutoConfiguration中关于静态资源配置的源码解读 (1)首先查看配置类WebMcvAutoConfiguration有没有生效,如下代码可以看到在条件装配中没有爆红,说明生效。 ?(2)在代码中可以看到该部分向容器中配置了很多东西,下面我们看一下内部静态类?WebMvcAutoConfigurationAdapter,翻译为中文就是WebMvc自动配置适配器 首先这是一个配置类,然后@Import()注解引入WebMvc需要的所有内容。@EnableConfigurationProperties注解开启配置绑定并把绑定的结果装入容器,其中WebMvcProperties.class与配置文件中前缀为spring.mvc的内容绑定。WebProperties与配置文件中spring.web的内容绑定。(配置绑定的内容详细查看前文:配置绑定) ?继续往下看代码可以看到配置类的有参构造函数,也就是把容器中的内容取出初始化成员变量。下面解释一下各个变量。 WebProperties webProperties:获取和spring.web绑定的所有的值的对象 WebMvcProperties mvcProperties:获取和spring.mvc绑定的所有的值的对象 ListableBeanFactory beanFactory:Spring的beanFactory,这其实是IOC容器 HttpMessageConverters: 找到所有的HttpMessageConverters ResourceHandlerRegistrationCustomizer: 找到资源处理器的自定义器 DispatcherServletPath:DispatcherServlet能处理的路径 ServletRegistrationBean:?给应用注册Servlet、Filter.... ?以上是初始化的内容,了解一下即可,与本文讲解的内容关系并不大。 (3)找到静态资源处理的代码,并打断点调试。其中resourceProperties就是webProperties.getResources()也就是spring.web中的配置内容。并且resourceProperties有个方法isAddMappings(),返回addMappings属性,addMappings属性默认为true。如果addMappings为ture则if中为false,那么直接走下去;如果addMappings属性为false,则if中为true,则直接return。因此addMapping的属性值用于控制静态资源能够被访问。 下面我们在配置文件中修改addMappings的值为false来验证一下:
?重启服务并访问静态资源,此时已经无法访问 ?把false改为ture重新运行,又可以访问了。 ?当add-mappings设置为true,那么代码继续向下运行到红色框,这部分的意思就是:如果访问路径是/webjars/**,那么就从类路径的/META-INF/resources/webjars/中寻找资源。 ?如果与this.mvcProperties.getStaticPathPattern()匹配就运行下图红色框。我们可以看一下this.mvcProperties.getStaticPathPattern()是什么,可以看到getStaticPathPattern()返回staticPathPattern,staticPathPattern=/**。如果和/**匹配那么注册器中注册this.resourceProperties.getStaticLocations(),点进去可以看到getStaticLocations()返回staticLocations,再点进staticLocations看到就是SpringBoot静态资源存放的四个路径( /META-INF/resources/,/resources/,/static/,/public/)。 ? ?这就和前文中静态资源访问联系起来了,其实内部是写死的。默认当访问路径匹配/webjars/**时去访问/META-INF/resources/webjars/中对应的内容。当访问路径匹配/**时去访问类路径下四个静态资源存放的文件夹。 ?(4)欢迎页面配置代码 ?上述代码其实就是new了一个WelcomePageHandlerMapping,然后返回并装入容器。点进WelcomePageHandlerMapping的构造函数查看源码: ?可以看到第一个if中判断welcomePage欢迎页是否为空并且staticPathPattern必须为默认的/**那么直接访问index.html。 如果不满足上述要求则运行else if中的内容,这部分就对应controller中是否有/index的访问路径,有的话,则打开网站直接访问/index。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/30 13:50:59- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |