当前位置: 首页 > news >正文

Thymeleaf模板引擎

6.1.1 模板引擎

        在现代Web开发中,模板引擎是不可或缺的一部分。它们帮助我们分离业务逻辑与前端展示,使前端开发更加高效、灵活。在众多模板引擎中,Thymeleaf以其简洁的语法、非侵入式的设计以及与Spring框架的无缝集成,逐渐成为许多开发者的首选。

        本文将详细探讨Thymeleaf模板引擎的特点、使用场景、基本语法及其与Spring Boot的整合方式。

Thymeleaf的特点

1. 非侵入式模板设计

Thymeleaf的设计遵循了非侵入式的原则,这意味着开发者可以直接使用HTML作为模板语言,只需在需要的地方添加Thymeleaf特定的属性前缀(默认为th:)。这种设计方式不仅使得前端设计师可以更加专注于页面设计,无需担心模板引擎的特定语法,还降低了后端开发人员的学习成本。

2. 支持HTML5标准

Thymeleaf完全支持HTML5标准,提供了丰富的标签库来处理条件语句、循环、国际化、URL处理等常见Web开发任务。这些标签的语法设计得非常直观,使得模板易于理解和维护。

3. 高性能

尽管Thymeleaf的语法简洁且功能强大,但它并未牺牲性能。在服务器端执行时,Thymeleaf会首先将模板转换为一种优化的执行结构,这种结构使得模板的渲染过程非常高效。

4. 与Spring框架无缝集成

Thymeleaf与Spring Framework无缝集成,为基于Spring的应用提供了强大的模板解决方案。特别是Spring Boot,更是将Thymeleaf作为默认的模板引擎之一,进一步简化了配置和使用过程。

5. 开箱即用

Thymeleaf提供了Spring标准方言以及一个与Spring MVC完美集成的可选模块,可以快速地实现表单绑定、属性编辑器、国际化等功能。这些功能极大地提高了开发效率,降低了开发成本。

6.2 快速上手

1.构建项目:

        之前已经教过怎么建项目了自己去翻一下

2.添加依赖

        不管采用那种构建项目方式,项目准备好后,需要配置pom.xml文件,添加相应的依赖(启动器),pom.xml文件中添加的依赖如下:

<dependencies>       <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
</dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><fork>true</fork></configuration></plugin></plugins></build>

3.application.properties添加配置

        spring.thymeleaf.cache=false

4.Model 准备

        在之前的学习中,entity、Repository已经开发完成(其实几乎不用写什么代码),此处只需要编写好Service即可,提供基本的CRUD功能

public interface UserService {User login(String usrName, String usrPassword);int addUser(User user);int deleteUser(Long usrId);int updateUser(User user);User getUser(Long usrId);List<User> findAllUsers();
}

5.控制器开发

        在com.bdqn.crm.web.controller包下创建 ExampleController,用于演示:

@Controller
public class ExampleController {@Resourceprivate UserService userService;@GetMapping(value = "hello/{id}")public String getUser(@PathVariable("id") Long usrId, Model model){User user = userService.getUser(usrId);model.addAttribute("user",user);return "demo/hello";}

6.开发页面

        在resource/templates/demo 目录下新建hello.html,Kind(种类)选择 HTML5 file

<!DOCTYPE html>
<!--加入对Thymeleaf模板引擎支持-->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>Hello</title><link rel="stylesheet" th:href="@{/css/index.css}" />
</head>
<body>
欢迎您,<span th:text="${user.usrName}">张三</span>!
</body>
</html>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【深度学习】发展过程和实际应用场景——图像分类 ?自然语音处理?语音识别?自动驾驶?医疗影像诊断?附代码
  • Java项目基于docker 部署配置
  • shell指令及笔试题
  • alembic常用命令
  • QTCreator 调试:unknown debugger type “No engine“
  • 51单片机-红外遥控器(NEC标准)
  • MFC-基础架构
  • Redis——常用数据类型List
  • <<编码>> 第 16 章 存储器组织(1)--比特锁存器 示例电路
  • spark之不同序列化对比
  • 常用英语短语
  • vue3+element-plus icons图标选择组件封装
  • java集合之map
  • JAVA SE8
  • 基于 C语言的 Modbus RTU CRC 校验程序
  • 【剑指offer】让抽象问题具体化
  • 【面试系列】之二:关于js原型
  • 【刷算法】从上往下打印二叉树
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • CentOS 7 防火墙操作
  • Fabric架构演变之路
  • Java基本数据类型之Number
  • js ES6 求数组的交集,并集,还有差集
  • LeetCode18.四数之和 JavaScript
  • oldjun 检测网站的经验
  • React系列之 Redux 架构模式
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 全栈开发——Linux
  • ​卜东波研究员:高观点下的少儿计算思维
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • # 数据结构
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (论文阅读40-45)图像描述1
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (转)memcache、redis缓存
  • (转)mysql使用Navicat 导出和导入数据库
  • .a文件和.so文件
  • .Net CF下精确的计时器
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .Net MVC + EF搭建学生管理系统
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .NET WPF 抖动动画
  • .Net6使用WebSocket与前端进行通信
  • .netcore 获取appsettings
  • .NET设计模式(11):组合模式(Composite Pattern)
  • @Bean有哪些属性
  • @PostConstruct 注解的方法用于资源的初始化
  • [ vulhub漏洞复现篇 ] Django SQL注入漏洞复现 CVE-2021-35042
  • [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序...
  • [000-01-030].Zookeeper学习大纲
  • [23] GaussianAvatars: Photorealistic Head Avatars with Rigged 3D Gaussians
  • [AIR] NativeExtension在IOS下的开发实例 --- IOS项目的创建 (一)