因为SpringBoot使用的是jar包以及嵌入式的tomcat,因此并不支持jsp,因此我们需要模板引擎
目前的模板引擎有Velocity、Freemarker、Thymeleaf。而SpringBoot推荐的Thymeleaf:语法更简单,功能更强大。
1、引入thymeleaf
在auto中查看
只要我们把HTML页面放在classpath:/templates/,thymeleaf就能自动渲染;
2、实践
编写一个业务请求:
在新建的html文件里简单命名一些内容
启动项目,并打开浏览器,输入url
3、使用thymeleaf语法;
需要注意的是,在JSP中我们可以直接在body中用${hello},但是在html中则不行,需要按照thymeleaf的语法。
另外,我们在业务逻辑里面声明一个map,用以存储数据:
运行程序后,打开浏览器进行访问:
如果我们去掉div的th:text
再看看看浏览器显示的结果:
但即使这个html文件带有th:text但是未经模板引擎渲染,也是这样的显示。例如我们把这个html页面拷贝到桌面,直接打开:
我们注意到,在浏览器访问请求时,界面上所显示的内容是th:text的内容而非div的内容,这是为什么呢?其实答案已经显而易见了,那就是经过了模板引擎的渲染,模板引擎进行解析访问,则请求的数据就成了后端的数据
4、语法规则
1)、th:text:改变当前元素里面的文本内容;
? th:任意html属性,来替换原生属性的值
例如在之前的页面中,有可能div会存在默认值,比如id,class。我们使用任意属性来替换原生属性的值
运行程序,我们在浏览器进行地址访问,并且在运行界面右键查看网页源代码:
注意到这里的id和class都变为了后台数据,但如果我们把这个页面单独拎出来,直接打开,查看页面源代码:
则这里并未取到后台数据!
那么这个th属性有多少个呢?我们查看官网文档,这些属性是按照优先级进行排序的:
我们可以详细看看每一个feature的含义
Fragment inclusion :片段包含,。类似于JSP中的include
Fragment iteration :遍历。c:foreach
Conditional evaluation :条件判断。c:if
Local variable definition :声明变量。c:set
General attribute modification :任意属性修改,支持prepend和append
Specific attribute modification :修改指定属性默认值
Text (tag body modification) :修改标签体内容
- th:text :转义特殊字符
- th:utext:不转义特殊字符
Fragment specification :声明片段
Fragment removal :清除片段
同时我们也看到在属性里面包含了表达式,这个表达式又有哪些呢?
1、 ${...}:获取变量值;OGNL;
1)、获取对象的属性、调用方法
2)、使用内置的基本对象
3)、内置的一些工具对象:
2、*{...}:选择表达式:和${}在功能上是一样;
补充:配合 th:object进行使用
- #{...}:获取国际化内容
- @{...}:定义URL;
例如@{/order/process(execId=${execId},execType='FAST')}
- ~{...}:片段引用表达式
当然,还有如下的一些属性标签
我们来看个简单的例子:
我们在业务逻辑controller中,给map添加如下数据:
编写前端页面:
运行项目,打开浏览器
有几处细节需要注意:
1处,如果写为users,则页面显示为
2处的写法需要注意,可以在官方文档中查看