Thymeleaf介绍及其在Spring Boot中的使用

news2025/1/12 4:07:11

📖 Thymeleaf简介

📚 Thymeleaf的定义

Thymeleaf 是一款现代化的服务器端 Java 模板引擎,适用于 Web 和独立应用场景。它具备处理 HTML、XML、JavaScript、CSS 以及纯文本的能力。Thymeleaf 的核心目标是为开发者提供一种优雅且自然的模板设计方式,从而使得开发者能够更加便捷地构建、创建和维护结构化且语义正确的 Web 页面。

🌟 Thymeleaf的特点

  • Thymeleaf具有可读性强、易于理解的语法。
  • Thymeleaf支持Spring MVC的所有特性,可以与Spring框架无缝集成。
  • Thymeleaf可以在没有Web服务器的情况下运行,便于开发和测试。
  • Thymeleaf支持多种模板解析器,可以根据需要选择合适的解析器。

🌐 Thymeleaf的应用场景

Thymeleaf 是一款适用于各种 Web 应用程序的强大模板引擎,无论是传统的服务器端 Web 应用程序、单页应用程序,还是移动 Web 应用程序,都能够轻松应对。此外,Thymeleaf 不仅局限于动态内容的生成,还可以用于生成静态内容,如电子邮件模板等,为开发者提供了极大的便利和灵活性。

🚀 在Spring Boot中使用Thymeleaf

📦 添加Thymeleaf依赖

在Spring Boot项目的pom.xml文件中,添加Thymeleaf的依赖:

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

⚙️ 配置Thymeleaf

在Spring Boot的application.properties或application.yml文件中,可以配置Thymeleaf的相关属性,例如模板文件的位置、缓存策略等。

spring:
  thymeleaf:
    prefix: classpath:/templates/
    suffix: .html
    cache: false

📝 编写Thymeleaf模板

在指定的模板文件夹(如上述配置中的classpath:/templates/)中,创建一个HTML文件,例如index.html。在HTML文件中,可以使用Thymeleaf的语法编写动态内容。

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Thymeleaf示例</title>
</head>
<body>
    <h1 th:text="${message}">Hello, Thymeleaf!</h1>
</body>
</html>

🎮 编写Spring Boot控制器

在Spring Boot项目中,创建一个控制器类,使用@Controller注解。在控制器方法中,可以将数据添加到Model对象中,并返回Thymeleaf模板的名称。

@Controller
public class HomeController {

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

📚Thymeleaf的常用语法

📊 变量表达式

使用${...}语法,可以在Thymeleaf模板中访问变量的值。

<p th:text="${user.name}">用户名</p>

🎛️ 选择表达式

使用*{...}语法,可以在Thymeleaf模板中访问当前对象的属性。

<div th:object="${user}">
    <p th:text="*{name}">用户名</p>
</div>

🔄 迭代表达式

使用th:each属性,可以在Thymeleaf模板中遍历集合。

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

🤝 Thymeleaf与Spring Boot的集成

🌱 使用Spring表达式语言

在Thymeleaf模板中,可以使用Spring表达式语言(SpEL)进行更复杂的表达式计算。

<p th:text="${@userService.findUserById(1).name}">用户名</p>

🔐 使用Spring Security集成

Thymeleaf可以与Spring Security集成,提供安全相关的标签和表达式。

<div th:if="${#authorization.expression('hasRole(''ROLE_ADMIN'')')}">
    管理员功能
</div>

🛠️ 使用Spring Boot的自动配置

Spring Boot提供了Thymeleaf的自动配置,可以根据项目的依赖和配置自动创建和配置Thymeleaf模板引擎、视图解析器等组件。

🔌 Thymeleaf的扩展和插件

🗣️ 使用额外的方言

接下来,我们将探讨Thymeleaf的一个重要特性,即支持使用额外的方言。这些方言包括Spring Security方言、布局方言等,它们可以为我们的Web应用带来更丰富的功能和更好的用户体验。接下来,我们将详细介绍如何通过添加依赖和配置方言来使用这些功能。

首先,我们需要了解什么是Thymeleaf方言。简单来说,方言是一组自定义的标签、属性和表达式,它们可以扩展Thymeleaf的功能,使其更加强大和灵活。例如,Spring Security方言可以帮助我们轻松地实现基于角色的页面内容显示,而布局方言则可以让我们更方便地管理页面布局和模板。

要使用这些方言,我们需要先在项目中添加相应的依赖。以Spring Security方言为例,我们可以在项目的pom.xml文件中添加以下依赖:

<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-springsecurity5</artifactId>
    <version>3.0.4.RELEASE</version>
</dependency>

接下来,我们需要在Thymeleaf模板引擎中配置这些方言。这可以通过在Spring配置类中定义一个SpringTemplateEngine bean并添加相应的方言实现。以下是一个示例:

@Configuration
public class ThymeleafConfig {

    @Bean
    public SpringTemplateEngine templateEngine(ITemplateResolver templateResolver) {
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.setTemplateResolver(templateResolver);
        templateEngine.addDialect(new SpringSecurityDialect());
        return templateEngine;
    }
}

至此,我们已经成功地为Thymeleaf引入了Spring Security方言。现在,我们可以在模板中使用这些方言提供的标签和属性,从而轻松地实现基于角色的页面内容显示等功能。

🛠️ 开发自定义方言

可以根据项目的需求,开发自定义的Thymeleaf方言,实现特定的标签和表达式。

在实际项目开发过程中,我们可能会遇到一些特定的需求,这时候,我们可以考虑开发自定义的 Thymeleaf 方言来实现这些特定的标签和表达式。通过这种方式,我们可以更好地满足项目的个性化需求,提高代码的可读性和可维护性。

我们可以根据项目的具体需求,设计自定义的标签和表达式。在设计过程中,我们需要考虑如何将这些元素与现有的 Thymeleaf 元素进行整合,以及如何确保它们的语义清晰、易于理解。

完成设计后,我们需要编写相应的 Java 代码来实现这些自定义元素。在编写代码时,我们需要遵循 Thymeleaf 的扩展规范,确保我们的自定义方言能够顺利地与 Thymeleaf 集成。

最后,我们需要在项目中引入自定义的 Thymeleaf 方言,并在模板中使用这些新的标签和表达式。这样,我们就可以利用自定义的 Thymeleaf 方言为项目提供更加丰富、灵活的功能,提高开发效率。

🧩 使用Thymeleaf插件

Thymeleaf有一些社区开发的插件,可以帮助我们轻松实现各种常见的功能,例如生成表格、实现分页等。在实际开发过程中,我们可以根据项目需求,灵活选择并集成这些插件,从而提高开发效率,优化用户体验。

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

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

相关文章

vue 图片上传到腾讯云对象存储组件封装(完善版)

vue 上传图片到腾讯云对象存储 1、 引入cos-js-sdk-v52、封装uploadcos.js3、封装图片上传组件、调用上传方法4、页面使用组件 之前总结过 vue 封装图片上传组件到腾讯云对象存储&#xff0c;后来又加了一些功能&#xff0c;在图片过大时进行压缩&#xff0c;压缩完成之后&…

基于NXP i.MX 6ULL——MQTT通信协议的开发案例

前 言 本指导文档适用开发环境&#xff1a; Windows开发环境&#xff1a;Windows 7 64bit、Windows 10 64bit Linux开发环境&#xff1a;Ubuntu 18.04.4 64bit 拟机&#xff1a;VMware15.1.0 U-Boot&#xff1a;U-Boot-2020.04 Kernel&#xff1a;Linux-5.4.70 Linux S…

深入理解ThreadPoolExecutor线程池工作原理源码解析

文章目录 0. 前言1. 生命周期管理1.1 创建1.2 执行1.2.1 任务执行入口1.2.2 addWorker解析1.2.3 Worker类解析 1.3 关闭1.4 终止阶段 2. 总结 0. 前言 背景&#xff1a;最近技术交流群里有个新同学&#xff0c;面试的时候被问到线程池相关的问题&#xff0c;答的不是很好&#…

LinkedIn领英如何创建公司主页?附领英产品专区创建方法

领英常见问题-如何创建公司主页&#xff1f; 领英不仅可以创建个人主页&#xff0c;还可以以企业的身份创建公司主页。 公司主页就相当于自己的官网&#xff0c;可以发布动态&#xff0c;展示公司信息&#xff0c;做官网外链&#xff0c;对公司来讲也是一种品牌形象宣传&…

PDF转换软件有哪些?分享免费好用的PDF转换工具!

PDF是在办公和学习中常用的文件格式&#xff0c;它包含文字、图片、数据等各种信息&#xff0c;可以说是功能丰富。然而&#xff0c;有时我们需要将PDF转换为PPT格式以便于演示&#xff0c;或者将其转换为Word格式以节省内存空间。这时候就需要使用PDF转换软件。下面我将介绍一…

20230618_ISP-pipeline-hdrplus_contrast

原理&#xff1a; global映射曲线&#xff0c;通过这个曲线控制黑的更黑&#xff0c;白的更白 b&#xff1a;黑电平 s&#xff1a;强度&#xff0c;值越大越接近yx&#xff1b;越小对比度越强 代码&#xff1a; 简单的映射表&#xff0c;没什么好讲的 效果&#xff1a; before&…

【Spring】设计思想

一、Spring 是什么&#xff1f; Spring是一个开源的Java框架&#xff0c;有着活跃而庞大的社区&#xff08;例如&#xff1a;Apache&#xff09;&#xff0c;Spring 提供了一系列的工具和库&#xff0c;可以帮助开发者构建高效、可靠、易于维护的企业级应用程序。Spring的核心…

jupyter插件nbextensions及Anaconda安装nbextensions

安装nbextensions 以管理员身份运行Anaconda Prompt&#xff0c;依次敲以下命令 用清华源安装 pip install jupyter_contrib_nbextensions -i https://pypi.tuna.tsinghua.edu.cn/simple pip install jupyter_nbextensions_configurator -i https://pypi.tuna.tsinghua.edu.cn…

如何连接 ONLYOFFICE 文档与Confluence Cloud

在本文中&#xff0c;我们来解释如何将ONLYOFFICE文档编辑器连接至Confluence Cloud。 Confluence Cloud 是什么&#xff1f; Confluence Cloud 是一款 Web 端生产力工具&#xff0c;可帮助用户在共享工作区中创建文档与其他内容&#xff0c;同时还可对其进行共享并开展协作。…

vue多次跳转同一页面不触发created刷新数据

摘要&#xff1a; 今天遇到一个问题&#xff0c;就是vue中跳转同一个详情页面的时候&#xff0c;路由没有变化&#xff0c;但是后面的参数有变&#xff0c;需要重新触发created钩子函数来触发方法来刷新数据&#xff01; 分析&#xff1a; 其实是因为没有触发vue的created或者m…

机器视觉初步9:目标检测专题

文章目录 1.Two-Stage方法1.1 Faster R-CNN1.2 R-FCN 2.One-Stage方法2.1 YOLOv3(你只看一次)2.2 SSD&#xff08;单次多框检测器&#xff09; 3.传统滑动窗口方法 机器视觉领域中常见的目标检测方法主要分为以下两类&#xff1a; Two-Stage方法1&#xff1a;在这类方法中&…

ThreadPoolExecutor的addWorker方法

该方法内部有两个for循环。外for循环用于校验线程池的线程个数。内for循环用于添加for循环并启动工作线程。 retry:打上标记位&#xff0c;方便后期内层for循环跳出到外层for循环。int c ctl.get();获取ctl的值。int rs runStateOf©; 获取ctl高三位的值。if (rs > SH…

【2022吴恩达机器学习课程视频翻译笔记】2.2监督学习-part-1

B站上面那个翻译我有点看不懂&#xff0c;打算自己啃英文翻译了&#xff08;有自己意译的部分&#xff09;&#xff0c;然后懒得做字幕&#xff0c;就丢在博客上面了&#xff0c;2.2之前的章节结合那个机翻字幕能看懂 监督学习 part 1(Supervised learning part 1) Supervise…

MySQL数据库的优化技术三

如何选择mysql的存储引擎 在开发中&#xff0c;我们经常使用的存储引擎 myisam / innodb/ memory存储引擎针对的是表和数据库 事务&#xff1a;MySQL事务主要用于处理操作量大&#xff0c;复杂度高的数据&#xff0c;比如说&#xff0c;在人员管理系统中&#xff0c;你删除一…

ProTable查询表单必填项不生效解决方法

配置完发现不生效&#xff0c;需要在protable组件里再配置一项属性form才能生效 如此才能真正生效

Kafka消息队列核心概念以及部署

文章目录 1.消息队列核心概念1.1.为什么要引入消息队列1.2.消息队列的流派 2.Kafka消息队列基本概念2.1.Kafka消息队列基本概念2.2.Kafka与Zookeeper的关系2.3.Kafka消息队列各组件概念2.4.Kafka消息队列应用场景 3.部署Kafka消息队列3.1.搭建Zookeeper分布式协调服务3.2.部署K…

loss.backward

如何计算&#xff1a;autograd包根据tensor进行过的数学运算来自动计算梯度 注意&#xff1a;1&#xff1a;autograd实现的。2&#xff1a;对tensor进行计算梯度。 之前损失计算&#xff1a;分割损失和边界损失计算正常。 踩坑1&#xff1a;模型有两个损失&#xff0c;分别为分…

FTL没有映射管理,跟上班没有钱有什么区别

大家好&#xff0c;我是五月。 前言 FTL&#xff08;Flash Translation Layer&#xff09;&#xff0c;即闪存转换层&#xff0c;是各种存储设备的核心算法&#xff0c;作用是将Host传下来的逻辑地址转换成物理地址&#xff0c;也就是映射。 可以说&#xff0c;地址映射是FT…

【五、软件包管理】

1 rpm rpm -qa 查询命令 [rootredis100 ~]# rpm -qa[rootredis100 ~]# rpm -qa |grep firefox firefox-68.10.0-1.el7.centos.x86_64rpm -e 卸载命令 [rootredis100 ~]# rpm -e fixerpm -ivh 安装命令 2 yum [rootredis100 ~]# yum -y install firefox修改网络源 切换目录…

机器学习——概率与统计

参考资料&#xff1a; 《机器学习》周志华https://zhuanlan.zhihu.com/p/27056207 1 马尔可夫链 1.1 定义 直观含义&#xff1a;在已知现在的条件下&#xff0c;过去与未来相互独立。 1.2 马尔可夫模型 根据定义&#xff0c;A 必为方阵 其中&#xff0c; p i j ( n ) P {…