【SpringBoot】11 Web开发 Part2 模板引擎
开发回顾:
JavaWeb开发使用JSP技术,所有的页面文件必须是JSP,才能接受数据处理
JSP的好处是,数据交互方便,有JSTL补充
SpringBoot的区别:
我们最终的项目是一个jar包
内嵌了Tomcat,这是不支持JSP的
纯静态页面的数据交互成技术难点了
解决方案:
模板引擎 TemplateEngine
常见的模板引擎:
- 初代目:JSP、JSTL、
- Thymeleaf
- Freemarker
- Velocity
模板引擎的核心思想:
1、在页面中写入模板【表达式】
2、由服务器传输数据,交给模板引擎
3、模板引擎处理数据注入到页面的模板中
4、最后在页面上生成我们想要的效果
【要注意,模板引擎的本质是对文档的Dom对象进行操作】
SpringBoot 推荐Thymeleaf
1、引入Thymeleaf
maven坐标
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
2、默认的模板位置
也就是resources.templates目录下
Thymeleaf会自动渲染这个目录内的所有页面
开始测试:
编写控制器
页面访问
传输数据
首先,被渲染的模板页面需要导入Thymeleaf的TL约束
这个约束可以不打,就是会没有提示信息
<html lang="en" xml:th="http://www.thymeleaf.org">
但是在IDEA的编写过程中是提示这个约束
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
改变当前元素的文本内容
<p th:text="${hello}"></p>
凡是元素具有的属性,只要在前面加 th:
这个属性的值就可以被模板引擎进行交互
th的值会替换当前元素原有的文本内容
【可以替换原生元素的属性值】
简单的表达式
字面值
文本运算符
算术运算符
布尔运算符
比较运算符
条件运算与三元运算
特殊的Token?
字面意思是【不操作】,用于三元运算的操作取消?
上述的这些特性可以被组合与嵌套
OGNL (Object-Graph Navigation Language)
对象图形导航语言
关于OGNL官网的详细介绍
http://commons.apache.org/proper/commons-ognl/
这种表达式用于获取变量【即对象、属性、值】
${Value}
可以使用对象引用属性的方式获取值
/**
Access to properties using the point (.). Equivalent to calling property getters.
*/
${person.father.name}
或者按对象的属性标识符来获取
/**
Access to properties can also be made by using brackets ([]) and writing
the name of the property as a variable or between single quotes.
*/
${person['father']['name']}
如果对象是一个Map,则点和括号语法将等效于对其get(…)方法执行调用
/**
If the object is a map, both dot and bracket syntax will be equivalent to
executing a call on its get(...) method.
*/
${countriesByCode.ES}
${personsByName['Stephen Zucchini'].age}
数组和List集合的引用
/**
Indexed access to arrays or collections is also performed with brackets,
writing the index without quotes.
*/
${personsArray[0].name}
你甚至可以写方法,和参数!?
/**
Methods can be called, even with arguments.
*/
${person.createCompleteName()}
${person.createCompleteNameWithSeparator('-')}
表达式内置的基本对象
在对上下文变量求值OGNL表达式时,某些对象可用于表达式以获得更高的灵活性。
这些对象将被引用(根据OGNL标准),从【#】符号开始
内置的工具对象
除了这些基本对象之外,Thymeleaf还将提供一组实用程序对象,
帮助我们执行表达式中的常见任务。
表达式的总结:
变量表达式
${Value}
- 表达对象、属性、值
- 表达对象的属性、
- 配合内置基本对象
- 配合内置工具对象
选择变量表达式
*{SelectionValue}
用于配合th:object表达式使用
官方的实例说明:
父类元素的th属性获取了这个表达式的对象
然后,里面子元素,可以使用*{}表达式直接调用父元素的这个object属性
消息表达式:
Message Expressions: #{...}
用于I18N的国际化
连接表达式:
Link URL Expressions: @{...}
用于定义链接,使用模板引擎声明URL的好处就是
- 动态注入连接参数
- 不需要写完整协议,从工程名后面开始即可
片段表达式:
Fragment Expressions: ~{...}
用于抽取封装HTML片段,提高可重用性
th:text & th:utext 的区别?
th:text 是不转义的表达式,我们写入<h1>text</h1> 会识别为文档标签
th:utext 是转义的表达式,我们写入<h1>text</h1> 会转义当成文本处理
遍历的属性表达式,prod表示遍历的变量,就是当成对象一样获取数学
这两种属性的行内写法:
th:text == [[ ${Value} ]]
th:utext == [( ${Value} )]
不推荐使用这种写法,如果没有获取到,页面将会解析这个表达式出来,
影响美观,泄露数据安全
【SpringBoot】11 Web开发 Part2 模板引擎的更多相关文章
- SpringBoot系列之集成jsp模板引擎
目录 1.模板引擎简介 2.环境准备 4.源码原理简介 SpringBoot系列之集成jsp模板引擎 @ 1.模板引擎简介 引用百度百科的模板引擎解释: 模板引擎(这里特指用于Web开发的模板引擎)是 ...
- SpringBoot(四) Web开发 --- Thymeleaf、JSP
Spring Boot提供了spring-boot-starter-web为Web开发予以支持,spring-boot-starter-web为我们提供了嵌入的Tomcat以及Spring MVC的依 ...
- SpringBoot:Web开发
西部开源-秦疆老师:基于SpringBoot 2.1.6 的博客教程 , 基于atguigu 1.5.x 视频优化 秦老师交流Q群号: 664386224 未授权禁止转载!编辑不易 , 转发请注明出处 ...
- SpringBoot之WEB开发-专题二
SpringBoot之WEB开发-专题二 三.Web开发 3.1.静态资源访问 在我们开发Web应用的时候,需要引用大量的js.css.图片等静态资源. 默认配置 Spring Boot默认提供静态资 ...
- SpringBoot入门:新一代Java模板引擎Thymeleaf(理论)
Spring Boot 提供了spring-boot-starter-web来为Web开发予以支持,spring-boot-starter-web为我们提供了嵌入的Tomcat以及SpringMVC的 ...
- 手动开发PHP模板引擎 一 (35)
模板叫做TPL,模仿于smarty模板引擎. 我们所说的模板是Web模板,是主要由HTML标记组成的语言来编写的页面,但也有如何表示包含动态生成内容的方式(解析标签).模板引擎是一种软件库,允许我们从 ...
- SpringBoot---Web开发---Thymeleaf模板引擎
一.前言 1.JSP在内嵌的Servlet容器中运行有一些问题: 1.1 内嵌的Tomcat.Jetty不支持以jar形式运行JSP: 2.2 Undertow不支持JSP: 2.SpringBoot ...
- SpringBoot学习(七)-->SpringBoot在web开发中的配置
SpringBoot在web开发中的配置 Web开发的自动配置类:在Maven Dependencies-->spring-boot-1.5.2.RELEASE.jar-->org.spr ...
- springboot java web开发工程师效率
基础好工具 idea iterm2 和 oh-my-zsh git 热加载 java web项目每次重启时间成本太大. 编程有一个过程很重要, 就是试验, 在一次次试验中探索, 积累素材优化调整程序模 ...
- JavaEE开发之SpringBoot整合MyBatis以及Thymeleaf模板引擎
上篇博客我们聊了<JavaEE开发之SpringBoot工程的创建.运行与配置>,从上篇博客的内容我们不难看出SpringBoot的便捷.本篇博客我们继续在上篇博客的基础上来看一下Spri ...
随机推荐
- minos 1.2 内存虚拟化——guest
首发公号:Rand_cs minos 1.2 内存虚拟化--guest 项目来自乐敏大佬:https://github.com/minosproject/minos 本文继续讲述 minos 中的内存 ...
- kettle从入门到精通 第五十三课 ETL之kettle MQTT/RabbitMQ producer 实战
1.MQTT介绍 MQTT (Message Queuing Telemetry Transport) 是一种轻量级的消息传输协议,设计用于连接低带宽.高延迟或不可靠网络的设备. MQTT 是基于发布 ...
- IDEA 新建 MAVEN JAVA 控制台程序 Console
IDEA 新建 MAVEN JAVA 控制台程序 Console File - New - Project-左侧选择 Maven,右侧勾选"Create from archetype&quo ...
- Future集合会等线程池执行完才开始遍历吗?
先说结论:Future集合并不是等线程池执行完才开始遍历,而是线程池内的线程执行完一条Future集合就立即遍历一条 在使用线程池的业务场景下,我们经常需要获取线程执行的返回值,此时我们需要Calla ...
- 增补博客 第七篇 python 比较不同Python图形处理库或图像处理库的异同点
OpenCV.Pillow 和 scikit image OpenCV(OpenCV 是一个强大的计算机视觉库,它提供了各种图像处理和计算机视觉算法的实现,可以处理各种图像和视频数据. 异同点 跨平台 ...
- xxlJob需要拆分开来,不用公用同一个jobHandler
xxlJob需要拆分开来,不用公用同一个jobHandler 不能使用同一个jobHandler,通过使用不同的任务参数来定义两个不同的job,实际在xxlJob中使用jobHandler来注册的.解 ...
- 又跳槽!3年Java经验收割成都大厂的面试心得(干货满满&文末有福利)
中厂->阿里->字节,成都->杭州->成都 系列文章目录和关于我 0.前言 笔者在不足两年经验的时候从成都一家金融科技中厂跳槽到杭州阿里淘天集团,又于今年5月份从杭州淘天跳槽到 ...
- 如何将本地的项目,上传到github
操作步骤: 1.github,创建一个仓库,复制仓库的地址 2.在要上传文件的目录,点击选择git bash here 3.输入[git clone],粘贴刚复制的仓库地址,clone成功后,会将仓库 ...
- 利用Vue做一个小购物车
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 在Linux中使用crontab
背景 虽然不是专业运维,但是在嵌入式开发中还是需要懂一点的.部门内部搞服务器最厉害的就是我了,汗. 参考: https://blog.csdn.net/longgeaisisi/article/det ...