Spring Boot 中的模板引擎是什么,如何使用

Spring Boot 中的模板引擎是什么,如何使用

在 Web 应用程序中,模板引擎是一种用于动态生成 HTML、XML、JSON 等文档的工具。Spring Boot 内置了多种常见的模板引擎,例如 Thymeleaf、Freemarker、Velocity 等,让我们可以轻松地创建动态网页。

本文将介绍 Spring Boot 中常用的模板引擎 Thymeleaf 的使用方法,包括如何配置、如何使用模板、如何传递数据等。

在这里插入图片描述

Thymeleaf 的配置

在 Spring Boot 中使用 Thymeleaf 非常简单,只需要在项目的依赖中添加以下两个依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>webjars-locator-core</artifactId>
</dependency>

上面的第一个依赖是 Spring Boot 的 Thymeleaf 启动器,它包含了 Thymeleaf 的必需依赖,并自动配置了 Thymeleaf 的视图解析器。第二个依赖是 WebJars,它是一个用于管理 Web 前端库的工具,我们可以使用它来引入 Thymeleaf 的 HTML 标签库。

在添加了依赖之后,我们还需要在配置文件中添加以下配置:

# 开启 Thymeleaf 缓存
spring.thymeleaf.cache=true

# Thymeleaf 模板所在的目录,默认为 classpath:/templates/
spring.thymeleaf.prefix=classpath:/templates/

# Thymeleaf 模板文件的后缀,默认为 .html
spring.thymeleaf.suffix=.html

# Thymeleaf 模板文件的编码,默认为 UTF-8
spring.thymeleaf.encoding=UTF-8

# 启用 Thymeleaf 的 HTML 标签库
spring.thymeleaf.mode=HTML

以上配置中,spring.thymeleaf.cache 属性用于开启 Thymeleaf 的缓存,以提高性能。spring.thymeleaf.prefix 属性用于指定 Thymeleaf 模板所在的目录,默认为 classpath:/templates/spring.thymeleaf.suffix 属性用于指定 Thymeleaf 模板文件的后缀,默认为 .htmlspring.thymeleaf.encoding 属性用于指定 Thymeleaf 模板文件的编码,默认为 UTF-8。spring.thymeleaf.mode 属性用于启用 Thymeleaf 的 HTML 标签库。

在完成了上述配置之后,我们就可以开始使用 Thymeleaf 了。

Thymeleaf 的使用

创建模板文件

首先,我们需要在 src/main/resources/templates 目录下创建一个 Thymeleaf 模板文件。例如,我们创建一个名为 index.html 的模板文件,文件内容如下:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Thymeleaf Demo</title>
</head>
<body>
    <h1 th:text="${message}">Hello World!</h1>
</body>
</html>

在上面的模板文件中,我们使用了 Thymeleaf 的 th:text 属性来动态显示消息。${message} 表示从控制器传递过来的数据,它将会被替换为实际的消息内容。

创建控制器

接下来,我们需要创建一个控制器来处理请求,并将数据传递给模板。例如,我们创建一个名为 DemoController 的控制器,代码如下:

@Controller
public class DemoController {
    @GetMapping("/")
    public String index(Model model) {
        model.addAttribute("message", "Hello Thymeleaf!");
        return "index";
    }
}

在上面的控制器中,我们使用了 @Controller 注解来定义一个控制器,它包含了一个 index 方法,用于处理根路径的 GET 请求。在 index 方法中,我们使用了 Model 对象来传递数据给模板,将一个名为 message 的属性设置为 Hello Thymeleaf!

运行程序

最后,我们需要启动程序并访问根路径,以查看 Thymeleaf 的效果。可以使用 Spring Boot 提供的内置 Web 服务器来运行程序,例如使用以下命令:

mvn spring-boot:run

启动成功后,在浏览器中访问 http://localhost:8080/,将会看到以下内容:

Hello Thymeleaf!

这证明 Thymeleaf 已经成功地将模板和数据结合起来,动态生成了 HTML 页面。

Thymeleaf 的语法

Thymeleaf 的语法非常简单,它提供了类似于 JSP 的标签和表达式。以下是一些常用的 Thymeleaf 语法:

变量表达式

使用 ${} 语法来表示变量表达式,例如:

<h1 th:text="${message}">Hello World!</h1>

在上面的例子中,${message} 表示从控制器传递过来的数据。

选择表达式

使用 *{} 语法来表示选择表达式,例如:

<input type="text" th:value="*{user.name}" />

在上面的例子中,*{user.name} 表示一个名为 user 的对象的 name 属性。

URL 表达式

使用 @{} 语法来表示 URL 表达式,例如:

<a th:href="@{/users/{id}(id=${user.id})}">Edit</a>

在上面的例子中,@{/users/{id}(id=${user.id})} 表示一个动态 URL,其中 {id} 表示一个参数,${user.id} 表示参数的值。

条件判断

使用 th:ifth:unless 来进行条件判断,例如:

<div th:if="${user.isAdmin}">
    <p>Welcome, administrator!</p>
</div>
<div th:unless="${user.isAdmin}">
    <p>Welcome, user!</p>
</div>

在上面的例子中,th:if 表示当表达式为真时显示,th:unless 表示当表达式为假时显示。

循环遍历

使用 th:each 来进行循环遍历,例如:

<ul>
    <li th:each="user : ${users}" th:text="${user.name}"></li>
</ul>

在上面的例子中,th:each 表示对 ${users} 集合进行遍历,将每个元素赋值给 user 变量,然后显示 user.name 属性。

更多的 Thymeleaf 语法可以参考官方文档:https://www.thymeleaf.org/documentation.html

总结

本文介绍了 Spring Boot 中常用的模板引擎 Thymeleaf 的使用方法,包括如何配置、如何使用模板、如何传递数据等。Thymeleaf 是一款功能强大、易于上手的模板引擎,它提供了简单的语法和丰富的标签库,让我们可以轻松地创建动态网页。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/35080.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

线性代数行列式的几何含义

行列式可以看做是一系列列向量的排列&#xff0c;并且每个列向量的分量可以理解为其对应标准正交基下的坐标。 行列式有非常直观的几何意义&#xff0c;例如&#xff1a; 二维行列式按列向量排列依次是 a \mathbf{a} a和 b \mathbf{b} b&#xff0c;可以表示 a \mathbf{a} a和…

Lua学习笔记:浅谈对垃圾回收的理解

前言 本篇在讲什么 Lua的垃圾回收 本篇适合什么 适合初学Lua的小白 本篇需要什么 对Lua语法有简单认知 依赖Sublime Text编辑器 本篇的特色 具有全流程的图文教学 重实践&#xff0c;轻理论&#xff0c;快速上手 提供全流程的源码内容 ★提高阅读体验★ &#x1f…

3、boostrap图片视频上传展示

boostrap图片视频上传展示 1、展示效果2、html代码 1、展示效果 项目目录结构 2、html代码 html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><!--<link rel"st…

记一次 .NET 某工控视觉系统 卡死分析

一&#xff1a;背景 1. 讲故事 前段时间有位朋友找到我&#xff0c;说他们的工业视觉软件僵死了&#xff0c;让我帮忙看下到底是什么情况&#xff0c;哈哈&#xff0c;其实卡死的问题相对好定位&#xff0c;无非就是看主线程栈嘛&#xff0c;然后就是具体问题具体分析&#x…

一起来看看文档翻译哪个好吧

在繁忙的都市生活中&#xff0c;小玲是一位年轻的职场人士。她的工作经常需要处理各种文档和文件&#xff0c;而其中不乏需要与外国合作伙伴交流的时候。然而&#xff0c;她并不熟悉其他语言&#xff0c;这给她的工作带来了一定的困扰。于是&#xff0c;她开始寻找免费的文档翻…

什么是AOP?

目录 一、AOP简介 1、AOP简介和作用 2、AOP的概念 二、AOP的基本实现 三、AOP工作流程 1 、AOP工作流程 2、AOP核心概念 四、AOP切入点表达式 1、语法格式 2、通配符 五、AOP通知类型 1、AOP通知分类 2、AOP通知详解 &#xff08;1&#xff09;前置通知 &#xf…

MySQL-分库分表详解(四)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a; 小刘主页 ♥️努力不一定有回报&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️学习两年总结出的运维经验&#xff0c;以及思科模拟器全套网络实验教程。专栏&#xf…

【ArcGIS微课1000例】0069:用ArcGIS提取一条线的高程值

本实验讲解用ArcGIS软件,基于数字高程模型DEM提取一条线的高程值并导出。 文章目录 一、加载实验数据二、将线转为折点三、提取折点高程值四、导出高程值五、注意事项【相关阅读】:【GlobalMapper精品教程】060:用dem提取一条线的高程值 一、加载实验数据 本实验使用的数据…

初学者一步步学习python 学习提纲

当学习Python时&#xff0c;可以按照以下提纲逐步学习&#xff1a; 入门基础 了解Python的历史和应用领域安装Python解释器和开发环境&#xff08;如Anaconda、IDLE等&#xff09;学习使用Python的交互式解释器或集成开发环境&#xff08;IDE&#xff09;进行简单的代码编写和…

Seafile搭建个人云盘 - 内网穿透实现在外随时随地访问

文章目录 1. 前言2. SeaFile云盘设置2.1 Owncould的安装环境设置2.2 SeaFile下载安装2.3 SeaFile的配置 3. cpolar内网穿透3.1 Cpolar下载安装3.2 Cpolar的注册3.3 Cpolar云端设置3.4 Cpolar本地设置 4. 公网访问测试5. 结语 转载自cpolar极点云文章&#xff1a;使用SeaFile搭建…

【电影推荐系统】基于 ALS 的协同过滤推荐算法

目录 目的 用户电影推荐矩阵主要思路如下 1 UserId 和 MovieID 做笛卡尔积&#xff0c;产生&#xff08;uid&#xff0c;mid&#xff09;的元组 2 通过模型预测&#xff08;uid&#xff0c;mid&#xff09;的元组。 3 将预测结果通过预测分值进行排序。 4 返回分值最大的 …

elk中kibana使用

1.前言 kibana是一款作为elasticsearch可视化的一款软件&#xff0c;将elasticsearch中的数据以可视化的状态展现出来&#xff0c;kibana也提供了查询、统计、修改索引等功能 2.kibana使用 索引管理 在索引管理中&#xff0c;可以看到所有索引的状态、运行状况、主分片、副本…

pytorch快速入门中文——07(TensorBoard)

使用 TensorBoard 可视化模型&#xff0c;数据和训练 原文&#xff1a;https://pytorch.org/tutorials/intermediate/tensorboard_tutorial.html 在 60 分钟突击中&#xff0c;我们向您展示了如何加载数据&#xff0c;如何通过定义为nn.Module子类的模型提供数据&#xff0c;如…

计算机体系结构基础知识介绍之缓存性能的十大进阶优化之编译器控制的预取和利用HBM扩展内存层次(七)

优化九&#xff1a;编译器控制的预取以减少丢失惩罚或丢失率 硬件预取的替代方案是编译器在处理器需要数据之前插入预取指令来请求数据。 预取有两种类型&#xff1a; ■ 寄存器预取将值加载到寄存器中。 ■ 高速缓存预取仅将数据加载到高速缓存。 这两种类型都可以分为有错…

跟我一起从零开始学python(一)编程语法必修

前言 随着互联网的高速发展&#xff0c;python市场越来越大&#xff0c;也越来越受欢迎&#xff0c;主要源于它&#xff1a;易学易用&#xff0c;通用性广&#xff0c;时代需要&#xff0c;源代码的开放以及人工智能浪潮&#xff0c;接来下我们就从这几个方向谈谈为何python越…

17 MFC进程通信

文章目录 剪切板管道匿名管道父进程写入数据子进程读出数据 命名管道 邮槽邮槽服务器邮槽客户端 剪切板 设置界面 发送 //设置剪切板数据 void CClipboardDlg::OnBnClickedBtnSend() {UpdateData(TRUE);if (m_strSend.IsEmpty()){MessageBox(L"请输入需要设置的文本&quo…

微信小程序如何进行开发?

文章目录 0.引言1.注册微信公众平台账号2.准备微信开发者工具3.创建微信小程序并预览 0.引言 笔者编程一般编得较多的是桌面软件&#xff0c;有时也会编手机软件&#xff0c;这些软件都必须安装才能使用&#xff0c;这限制了软件的推广。而现有社交软件如微信使用得较广泛&…

Linux的编译器——gcc/g++(预处理、编译、汇编、链接)

文章目录 一.程序实现的两个环境二.gcc如何完成1.预处理2.编译3.汇编4.链接 三.动态库与静态库对比下二者生成的文件大小 四.gcc常用选项 前言&#xff1a; 本文主要认识与学习Linux环境下常用的编译器——gcc&#xff08;编译C代码&#xff09;/g&#xff08;编译C代码&#x…

深度学习--神经网络全面知识点总结(持续更新中)

文章目录 神经网络基础1.1 什么是神经网络&#xff1f;1.2 神经元和激活函数1.3 前向传播和反向传播1.4 损失函数和优化算法 深度神经网络2.1 卷积神经网络&#xff08;CNN&#xff09;2.2 循环神经网络&#xff08;RNN&#xff09;2.3 长短期记忆网络&#xff08;LSTM&#xf…

凝思系统docker离线安装

# linux离线安装docker (18.03.1-ce) ## 解压&#xff0c;得到docker文件夹 tar xzvf docker-18.03.1-ce.tgz ## 将docker文件夹里面的所有内容复制到/usr/bin目录 sudo cp docker/* /usr/bin/ ## 开启docker守护进程 sudo dockerd & 当终端中显示【API list…