开发回顾:

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 模板引擎的更多相关文章

  1. SpringBoot系列之集成jsp模板引擎

    目录 1.模板引擎简介 2.环境准备 4.源码原理简介 SpringBoot系列之集成jsp模板引擎 @ 1.模板引擎简介 引用百度百科的模板引擎解释: 模板引擎(这里特指用于Web开发的模板引擎)是 ...

  2. SpringBoot(四) Web开发 --- Thymeleaf、JSP

    Spring Boot提供了spring-boot-starter-web为Web开发予以支持,spring-boot-starter-web为我们提供了嵌入的Tomcat以及Spring MVC的依 ...

  3. SpringBoot:Web开发

    西部开源-秦疆老师:基于SpringBoot 2.1.6 的博客教程 , 基于atguigu 1.5.x 视频优化 秦老师交流Q群号: 664386224 未授权禁止转载!编辑不易 , 转发请注明出处 ...

  4. SpringBoot之WEB开发-专题二

    SpringBoot之WEB开发-专题二 三.Web开发 3.1.静态资源访问 在我们开发Web应用的时候,需要引用大量的js.css.图片等静态资源. 默认配置 Spring Boot默认提供静态资 ...

  5. SpringBoot入门:新一代Java模板引擎Thymeleaf(理论)

    Spring Boot 提供了spring-boot-starter-web来为Web开发予以支持,spring-boot-starter-web为我们提供了嵌入的Tomcat以及SpringMVC的 ...

  6. 手动开发PHP模板引擎 一 (35)

    模板叫做TPL,模仿于smarty模板引擎. 我们所说的模板是Web模板,是主要由HTML标记组成的语言来编写的页面,但也有如何表示包含动态生成内容的方式(解析标签).模板引擎是一种软件库,允许我们从 ...

  7. SpringBoot---Web开发---Thymeleaf模板引擎

    一.前言 1.JSP在内嵌的Servlet容器中运行有一些问题: 1.1 内嵌的Tomcat.Jetty不支持以jar形式运行JSP: 2.2 Undertow不支持JSP: 2.SpringBoot ...

  8. SpringBoot学习(七)-->SpringBoot在web开发中的配置

    SpringBoot在web开发中的配置 Web开发的自动配置类:在Maven Dependencies-->spring-boot-1.5.2.RELEASE.jar-->org.spr ...

  9. springboot java web开发工程师效率

    基础好工具 idea iterm2 和 oh-my-zsh git 热加载 java web项目每次重启时间成本太大. 编程有一个过程很重要, 就是试验, 在一次次试验中探索, 积累素材优化调整程序模 ...

  10. JavaEE开发之SpringBoot整合MyBatis以及Thymeleaf模板引擎

    上篇博客我们聊了<JavaEE开发之SpringBoot工程的创建.运行与配置>,从上篇博客的内容我们不难看出SpringBoot的便捷.本篇博客我们继续在上篇博客的基础上来看一下Spri ...

随机推荐

  1. pandas基础--数据结构:DataFrame

    从本文开始介绍pandas的相关知识. pandas含有是数据分析工作变得更快更简单的高级数据结构和操作工具,是基于numpy构建的. 本章节的代码引入pandas约定为:import pandas ...

  2. Java中的变量分类(按照位置分类)

    变量按位置分 通过上面类的建立我们又得到了新的概念:成员变量和局部变量 成员变量: 可以使用基本数据类型,也可以使用引用数据类型. java中的变量在使用时必须初始化,成员变量可以不对其初始化,系统会 ...

  3. vue3使用表格el-table-infinite-scroll.js:18 Uncaught (in promise) Error: [el-table-infinite-scroll]: .el-scrollbar__wrap element not found.

    先看下表格里面有没有这个el-scrollbar__wrap class类 没有的话升级一下element-plus到最新的就行 你可以先查看element-plus的版本 npm view elem ...

  4. “Newtonsoft.Json”已拥有为“Microsoft.CSharp”定义的依赖项。

    安装较低版本的Newtonsoft.Json: Newtonsoft.Json官网:https://www.nuget.org/packages/Newtonsoft.Json/ Install-Pa ...

  5. Mybatis 动态 sql 是做什么的?都有哪些动态 sql?能简述一下动态 sql 的执行原理不?

    a.Mybatis 动态 sql 可以让我们在 Xml 映射文件内,以标签的形式编写动态 sql,完成逻辑判断和动态拼接 sql 的功能. b.Mybatis 提 供 了 9 种 动 态 sql 标 ...

  6. 解锁LLMs的“思考”能力:Chain-of-Thought(CoT) 技术推动复杂推理的新发展

    解锁LLMs的"思考"能力:Chain-of-Thought(CoT) 技术推动复杂推理的新发展 1.简介 Chain-of-Thought(CoT)是一种改进的Prompt技术, ...

  7. url编码和解码分析URLEncoder.encode和URLDecoder.decode

    url编码和解码分析 1.Get请求会将参数做默认的url解码操作,接口接收到的值是Get解码后的值.2.可以将Get操作修改成Post操作,这样不会url解码.可以在接口中做url解码.3.在多次传 ...

  8. kooder安装及本地搜索git仓库代码

    kooder安装及本地搜索git仓库代码 需求背景:如果需要从Git代码仓库查询某个配置项做批量的更新替换,如果一个一个找不合适且容易遗漏,需要借助第三方工具来模糊查询来实现. 1.下载及文档地址ht ...

  9. Primer Premier 6安装使用教程

    Primer Premier是一款专业级PCR引物设计工具软件,专为科研及分子生物学实验定制PCR扩增.测序探针及杂交引物.该程序运用尖端演算法评估引物的特异性.二聚体可能性和熔解温度等核心属性,确保 ...

  10. 个人团队兼职开发app(社交,语聊1v1,视频直播)

    如果您有意向创业,意向社交类产品,如语聊,及时通信,视频直播,1v1等,又苦无没有人力资源. 我们岁数都是30+,在互联网行业摸爬滚打十年有余. 后端,前端,客户端,运维,四个人. 我们共事很长一段时 ...