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

news2024/11/28 10:40:18

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 是一款功能强大、易于上手的模板引擎,它提供了简单的语法和丰富的标签库,让我们可以轻松地创建动态网页。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

赋值CString时导致程序崩溃的一个问题

使用GetWindowTextW将vgj容器内指定结构体的opinion变量赋值 GetDlgItem(IDC_EDIT2)->GetWindowTextW(vgj.at(i).opinion);//将opinion赋值导致程序出现崩溃&#xff0c;通常这种崩溃是由于访问野指针造成的 检查之前的代码有 memset(&vgj.at(i), 0, sizeof(vgj.at(i…

TextFuseNet:具有更丰富融合特征的场景文本检测

计算机视觉 文章目录 计算机视觉摘要1.介绍2.相关工作3.方法3.1框架3.2 多层次特征表示3.3 多路径融合体系结构3.4 弱监督学习 4.实验4.1 数据集4.2 细节4.3消融实验4.4 与最新的形状文本检测方法的比较 5. 结论 论文地址&#xff1a;https://www.ijcai.org/Proceedings/2020/7…

Python教程(2)——开发python常用的IDE

为什么需要IDE 在理解IDE之前&#xff0c;我们先做以下的实验&#xff0c;新建一个文件&#xff0c;输入以下代码 total_sum 0 for x in range(1,101):total_sum x print(total_sum)非常非常简单的一个程序&#xff0c;主要就是计算1加到100的值&#xff0c;我们将它重命名…

阿里云国际站:阿里云究竟是如何胜出的?

标题&#xff1a;阿里云究竟是如何胜出的&#xff1f;   "阿里云究竟是如何胜出的&#xff1f;"这是一个引人入胜的问题&#xff0c;值得我们深挖细究。作为中国市场上引领潮流的云计算服务供应商&#xff0c;阿里云的成功并不是偶发事件&#xff0c;而是其在技术创…

Java语言 - Unicode编码与字符串互转

概述 项目需要Unicode编码与字符串互转&#xff0c;在此做个笔录。 1、code // Press Shift twice to open the Search Everywhere dialog and type show whitespaces, // then press Enter. You can now see whitespace characters in your code. public class Main {public…

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

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

npm配置淘宝镜像

1.直接配置 npm config set registry https://registry.npmmirror.com/ 2.工具配置 使用nrm配置&#xff0c;镜像地址为&#xff1a;npm registry manager 2.1安装 npm install -g nrm open8.4.2 --save 2.2使用淘宝镜像 nrm use taobao 2.3切换镜像 nrm ls 2.4查看配置项 n…

ssl代理是什么,哪些业务场景可以使用ssl代理?

随着数智化时代的到来&#xff0c;网络安全变得尤为重要。为了保护敏感信息和确保通信的安全性&#xff0c;SSL代理应运而生。SSL代理是一种网络代理服务器&#xff0c;通过解密和重新加密SSL/TLS加密通信&#xff0c;实现对网络通信的监控、分析和保护。今天&#xff0c;我们就…

伦敦金实时走势k线图中的信息

伦敦金实时走势k线图中隐含者很多投资者容易忽略的信息&#xff0c;而且这些信息并不是借助技术指标就能够解读得到得&#xff0c;要通过金价过去和实时走势&#xff0c;去判断未来的走势&#xff0c;投资者需要经历以下的步骤&#xff1a; 首先是要读懂市场的基本结构。很多伦…

Mysql数据库(三) Mysql命令行客户端数据增加、查询、修改、删除;起别名、去重

目录 一、数据增加、查询、修改、删除、起别名、去重 1.0 准备操作 1.1 添加数据 insert 1.1.1 全列添加 1.1.2 部分列插入 1.1.3 插入多行数据 1.2 查询数据 select 1.2.1 查询所有的 列 1.2.2 查询指定的 列 1.3 修改数据 update set 1.4 删除数据 delete 1.5 …

C#(五十三)之线程同步、互锁

无关线程&#xff1a;线程之间没有任何联系&#xff0c;独立运行&#xff0c;互不干扰 相关线程&#xff1a;线程之间有联系&#xff0c;两个线程之间资源共享 临界线程&#xff1a;多个线程共享资源 临界区&#xff1a;访问临界资源代码 同步&#xff1a;两个线程协同工作…

单摆模型(博途PLC和Simulink仿真对比)

单摆模型的详细推导公式可以参看下面文章链接,这篇博客主要给出在博途PLC里如何完成单摆模型的建模, 倒立摆的PLC控制(模型分析+ SCL源代码)_RXXW_Dor的博客-CSDN博客首先简单介绍下倒立摆模型,下面这幅图是MATLAB网站上的倒立摆模型,下面我们利用牛顿第二运动定律建立摆杆…

自由创新,分享图片编辑工具

在当今社交媒体的流行时代&#xff0c;分享精美照片已成为人们生活中不可或缺的一部分。为了让我们的照片更加与众不同&#xff0c;图片编辑工具成为了必备的利器。这些神奇的工具不仅能帮助我们改善照片的外观和质量&#xff0c;还能增添创意效果&#xff0c;让我们的照片在社…

vue-导入图标iconfont到项目中并使用

阿里巴巴矢量图标库官网&#xff1a; 打开官网-我的素材库 选中要导入的项目-点击下载 下载好一个包 解压后得到 将这些文件全部复制到vue项目的src/assets/icon目录下 在main.js中导入 import /assets/icon/iconfont.css 即可使用 【示例】 在任意一个vue界面的<templa…

Loki 日志块使用 MinIO 对象存储

简介 与其他日志记录系统不同&#xff0c;Grafana Loki 是围绕仅索引有关日志的元数据的想法构建的&#xff1a;标签&#xff08;就像 Prometheus 标签一样&#xff09;。然后&#xff0c;日志数据本身会被压缩并以块的形式存储在对象存储&#xff08;例如 S3 或 GCS&#xff…

RealEvo-IDE 更换激活码 License到期续期

license到期之后&#xff0c;会出现RealEvo-IDE无法打开的状况。在有新license的状况下&#xff0c;如何在不重新安装的情况下使用IDE&#xff1f;主要分为以下几个步骤&#xff1a; &#xff08;1&#xff09; 右击“RealEvo-IDE”&#xff0c;点击“打开文件位置”&#xff…

软件测试技能,JMeter压力测试教程,逻辑控制器之事务控制器(二十五)

一、前言 TPS就是每秒钟所处理的事务数&#xff0c;那么到底什么是事务呢&#xff1f; 事务是用户自定义的一个标识&#xff0c;是一个或多个操作完成一个业务所花费的时间&#xff0c;事务时间反映的是一个操作过程的响应时间 二、事务场景 电商场景大家并不陌生&#xff…

【Unity】Unity接入内购IAP,提示you are not authorized to set the license key

接入IAP的时候需要输入谷歌的开发者后台key Unity2020之后有可能会提示&#xff1a;you are not authorized to set the license key 查阅相关内容后&#xff08;https://forum.unity.com/threads/purchase-you-are-not-authorized-to-set-the-license-key-google-play.95426…

vue运行background-removal-js库

前段时间在github上有个能在浏览器扣图的js库蛮火https://github.com/imgly/background-removal-js 演示网站&#xff1a;demo 不仅仅能将人物主体扣出&#xff0c;还能处理动物、植物等 最近我萌发出在vue中运行这个库的想法&#xff0c;记录一下 下载、配置 首先当然是通…

揭秘python函数:编程艺术的核心力量

文章目录 前言什么是 python 函数函数的使用步骤1&#xff09;定义函数2&#xff09;调用函数 带有参数的函数函数的返回值函数的说明文档函数的嵌套调用实现简易的计算器 前言 当我们深入研究 Python 的内心深处&#xff0c;我们将会发现&#xff0c;函数是其内核的核心力量。…