小编带着小白看springboot源码3
上一节讲到了快速新建一个springboot应用,以及springboot的自动配置类起作用的时机,并且一起看了一个自动配置类的源码。
这一节我们来粗略看看当用户在浏览器输入一个url,怎么样返回一个静态HTML和动态网页,以及其中的原理。
在此之前说一点,springboot不支持jsp,也就是说以前我们写的jsp页面页面在这里解析不了,换句话说,springboot肯定有一个自己独有的类似jsp的技术来实现动态网页的访问,这点毫无疑问,不然一个网站只能访问html网页,太单调了。
springboot的这个独有的技术是thymeleaf,下面就简要说说thymeleaf,要想彻底学会还需要自己多查查资料,我这里只能说一个大概的。
1.初识thymeleaf
作为一个类似于jsp的技术,用脚趾头想肯定是类似标签的东西、符合thymeleaf语法,经过thymeleaf引擎解析(thymeleaf引擎又是个什么东西呢?很抽象,我也说不好说;总之,想想jsp引擎,不就是将那些jsp页面里的所有标签解析成servlet,然后向用户响应servlet,第一次请求要先将jsp文件里面的东西全部解析成servlet,然后还要编译成.class文件,运行,然后才能响应简直了,而且jsp开发比较慢,以及后期的项目部署花费比较高,虽然说jsp第二次以及之后运行速度很快、安全性比较好,但是市场上用jsp开发的大多是银行啊这些国企,小企业是没有那个经济用jsp开发,扯远了。。。)
目录结构
用thymeleaf之前,导入依赖以及版本控制(这个可以不用springboot自带的版本),以及在带有thymeleaf的html文件加入名称空间
pom.xml文件:
说说thymeleaf语法基本就是这样一个模式,th:xx=“${xxx}”,这里的xx可以是任意属性值,假设有如下一个controller
打开success.html,
还有th:if th:object th:each等标签的运用自己去试试,跟jsp里面的标签及其相似,这里不多说了。根据上面的设置,运行,打开浏览器测试,打开heml源码就能看到效果。
2.thymeleaf小知识
为什么controller里面返回的success,就会跳转到template/success.html页面,thymeleaf引擎就会将其解析,并响应呢?而且静态网页为什么是放在那个static文件夹下,放在其他地方行吗?这都是需要大概了解的
首先,我们打开这个类
我们打开ThymeleafProperties这个类,可以看到一些属性
这就很明显了,配置了前缀后缀,无非是视图解析器调用这个类中的属性,然后和controller返回的字符串(就是所谓的逻辑视图名)和这个前后缀拼接组成真正的视图全路径,再调用模板引擎去解析成最终的html,然后响应。
由此,我们就要知道,thymeleaf文件就要放在类路径下的template文件夹下,并且以.html结尾,或者自己去主配置文件spring.thymeleaf.xx="xxx"去自定义位置。
3.静态文件路径解析
接下来是静态文件夹,还记不记得前面的导入了很多的xxxAutoConfiguration,这里的静态文件位置就要用到一个,就是WebMvcAutoConfiguration,这个自动配置类其实就是相当于ssm的springmvc配置。
补充一个知识点,webjars网站https://www.webjars.org/,这里将很多的东西都打包成了jar包,想要用什么只需要导入相关的依赖就可以了。
比如springboot会用到jquery,webjars的依赖,然后html文件里引用就好。
打开这个类WebMvcAutoConfiguration,看到这个方法里里面
现在我们就要看看staticPathPattern到底是什么,点开getStaticPathPattern();------------->点开return xxx.staticPathPattern-------->看到private String staticPathPattern = "/**";
我们就明白了,访问路径:我们只要在浏览器输入localhost:8080/xxx都可以了
继续分析this.resourceProperties.getStaticLocations()这个,这代表springboot会去×××你想要的静态文件
点开.getStaticLocations()------->点开return this.staticLocations;---------->private String[] staticLocations = RESOURCE_LOCATIONS;(点开RESOURCE_LOCATIONS),最后,你能看到如下代码
结论:
1.假如你在浏览器输入localhost:8080/webjars/xxx,springboot就会遍历所有jar包下的webjars,直至找到xxx文件
2.假如你在浏览器输入localhost:8080/xxx,那么springboot就会在如下的五个路径下依次遍历,直到找到则个静态文件,否则,抛出异常
{"/",
"classpath:/META-INF/resources/",
"classpath:/resources/",
"classpath:/static/",
"classpath:/public/" };
3.假如在浏览器输入localhost:8080/xxx(动态网页),springboot就会去类路径下template/xxx.html文件
转载于:https://blog.51cto.com/13842645/2330829
小编带着小白看springboot源码3相关推荐
- 小编带着小白看springboot源码2
上一节讲到先创建maven项目,然后导入依赖,主配置类等步骤,现在来个快速创建一个springboot模板,不需要向上节那么繁琐. 1.快速创建springboot应用 IDEA---->f ...
- java小新人 带着萌新看springboot源码
这节来说个大家都比较熟悉的东西,就是servlet三大组件,servlet.filter.listener,再说说springboot的内置tomcat. 也许还会说一下tomcat的运行原理 ...
- 带着萌新看springboot源码02
一节在springboot中配置了servlet三大组件以及嵌入式servlet容器,并且还简单的说了如何切换不同的容器. 这一节就来说说如何改变servlet容器的配置参数,一般有两种常见的方式,第 ...
- 小编带你两图看清北京大厂公司、码农分布——谷歌,微软,百度,腾讯,阿里,滴滴,美团,头条,独角兽
小编带你两图看清北京大厂公司.码农分布--谷歌,微软,百度,腾讯,阿里,滴滴,美团,头条 北京一二线大厂公司.码农分布 年关将至,意味着2021年即将过去,2022年即将到来 现在,就是大家开始为 ...
- spring-boot-2.0.3不一样系列之源码篇 - springboot源码一,绝对有值得你看的地方
前言 上篇:spring-boot-2.0.3不一样系列之shiro - 搭建篇,实现了spring-boot与shiro的整合,效果大家也看到了,工程确实集成了shiro的认证与授权功能.如果大家能 ...
- 不会部署并调试SpringBoot源码?一看必会IDEA操作
专题系列分类:玩转SpringBoot2.x系列教程 前言 你是否遇在面试中遇到如下提问: 面试官:了解过SpringBoot 的源码吗 ? 我:- 没有. 面试官:下一位. 当你从面试公司出来后,你 ...
- SpringBoot源码初学者(二):SpringBoot事件监听器
ps:真正适合阅读源码的新手来看的SpringBoot源码讲解,如果你真的想读懂SpringBoot源码,可以按照以下推荐的方式来阅读文章 打开ide,打开SpringBoot源码,跟着文章一起写注释 ...
- 看完源码记不住,是我记性太差了吗?
都说大厂面试必问源码,尤其是现在最流行的Java 开发技术--Spring的源码.可很多人看完Spring源码记不住,是记性太差了吗? 当然不是!是因为你没有掌握学习源码的技巧. 看完源码的我- 前段 ...
- rock带你读CornerNet-lite系列源码(二)
文章目录 前言 CorNerNet 结构 CornerNet_saccade结构 attention机制 CornerNet_Squeeze结构 构建Groundtruth 热图 focal loss ...
- 01、JUL日志(JDK自带日志框架,包含源码分析)
文章目录 前言 一.JUL架构介绍 1.1.认识不同组件 1.2.Logger 1.3.Handler 二.输出日志信息 三.自定义日志级别配置 3.1.认识Level类 3.2.输出不同等级日志 3 ...
最新文章
- django mysql 时区_django 中的时区设置
- 基于Seam+Carving和显著性分析的图像缩放方法MATLAB仿真
- 文巾解题 136. 只出现一次的数字
- 蓝桥杯2017初赛-迷宫-dfs
- 武汉工程大学2020GPLT选拔赛(上)
- 关于Nocas的几个问题
- BERT源码分析(二)
- 51nod1174--区间中最大的数--线段树
- Java自学教程汇总
- 括号序列(DP优化)
- IP地址和mac地址的区别
- ArcGIS导入excel文件
- html网页底部代码实例,HTML网页头部代码实例详解H 这个首页的html5网站
- window7系统电脑屏幕亮度调节
- 水晶报表10的下载地址及注册码
- week4——实验题解(csp模拟1)
- 测试常用正则表达式整理汇总
- 【自动化测试】Web自动化测试框架01
- 2022宁波市第五届网络安全大赛(初赛Misc部分)
- 用H5和原生JS制作一款简单的视频播放器
热门文章
- SVN增加文件后,文件无法自动包括在项目中的原因
- jQuery-对标签元素 文本操作-属性操作-文档的操作
- Quartz.NET开源作业调度框架系列(五):AdoJobStore保存job到数据库
- HDU 4983 Goffi and GCD(数论)
- TatukGIS - GisDefs - CheckFileWriteAccess 函数
- 函数对象function object 以及boost::bind的一点了解
- 2019牛客多校第六场H Pair(数位DP 多个数相关)题解
- 数据流中的中位数 Find Median from Data Stream
- Spring AOP无法拦截Controller中的方法
- MySQL数据库远程连接开启方法