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

Java学习 - Spring Boot整合 Thymeleaf 实例

什么是 Thymeleaf

  • Thymeleaf 是新一代的 Java 模板引擎,类似于 Velocity、FreeMarker 等传统引擎,其语言和 HTML 很接近,而且扩展性更高;

  • Thymeleaf 的主要目的是将优雅的模板引入开发工作流程中,并将 HTML 在浏览器中正确显示。同时能够作为静态引擎,让开发成员之间更方便协作开发;

  • Spring Boot 官方推荐使用模板,而且 Spring Boot 也为 Thymeleaf 提供了完整的自动化 配置解决方案;

  • Thymeleaf 使用教程请戳 Tutorial: Using Thymeleaf,配合 Spring 使用的教程请戳 Tutorial: Thymeleaf + Spring。

整合过程

准备过程

正式开始整合过程之前,这里先给出本文的搭建环境,方便大家进行后续内容的学习。

  • JDK 11(理论上其他版本的 JDK 也是可以的,但是更为推荐 JDK 1.8 及以后的版本)
  • IDEA(这里没有啥要求,但我个人的话是出新的版本我就会更新,虽然臃肿,但是更新了确实好用 😂)
  • SpringBoot 2.x(现在主流应该都是 2.x 版本,1.x 的都是老一点的版本了)

添加 Thymeleaf 依赖

添加 Thymeleaf 依赖有两种方式:

  1. 第一种

在新建项目时添加,在 Templeate Engines 中勾选 Thymeleaf;

在这里插入图片描述

  1. 第二种

对于忘记在新建项目时未添加 Thymeleaf 依赖的项目,可以直接在项目的 pom.xml 中手动添加依赖即可;

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

编写实体类和 Controller

  1. 新建实体类 User

这里因为使用 Lombok,所以省去了各种 settergetter,同时还省去了各种构造方法和重写 toString() 等方法,大大简化了代码。而我们所要做的,仅仅是在 pom.xml 中添加 Lombok 的依赖,然后在我们的实体类中加入对应的注解即可。

以下是在 pom.xml 中插入 Lombok 依赖的对应代码。

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional>
</dependency>

然后我们就可以编写我们的实体类,这里主要用到了 @Data@Component@AllArgsConstructorNoArgsConstructor 四个注解,其中各个注解的含义如下:

  • @Component:把类实例化到 Spring 容器,相当于在配置文件中配置;

  • @Data :给类的所有属性提供 getset 方法,此外还有 equals、canEqual、hashCode、toString 方法以及 默认参数为空的构造方法

  • @AllArgsConstructor:为类提供一个 全参构造方法,但此时不再提供默认构造方法;

  • @NoArgsConstructor:因为使用了 AllArgsConstructor 会导致类没有默认空参构造方法,所以此时需要它为类提供一个 无参构造方法

package com.cunyu.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.stereotype.Component;/*** @className : User* @description : User 实体类*/@Component
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {private int age;private String name;private String email;
}
  1. 编写 Controller

此时主要需要注意的是 setViewName()addObject(),前者表示方法对应的前端页面,也就是我们模板中对应文件名的 .html 文件,而后者则主要给属性注入值,然后将属性传递到前端模板。

package com.cunyu.controller;import com.cunyu.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;/*** @className : UserController* @description : UserController*/@Controller
public class UserController {// 访问 ip:port/index@GetMapping("/index")public ModelAndView index() {ModelAndView modelAndView = new ModelAndView();// 设置跳转的视图,即位于 templates/index.htmlmodelAndView.setViewName("index");modelAndView.addObject("title", "Thymeleaf 使用");modelAndView.addObject("desc", "Spring Boot 整合 Thymeleaf");User author = new User(25, "村雨遥", "747731461@qq.com");modelAndView.addObject("author", author);return modelAndView;}
}

创建Thymeleaf 模板

第上面的代码中,我们设置了跳转的视图为 index,所以我们需要在 src/main/resources/templates 中创建 index.html

在这里插入图片描述

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><!-- 即 Controller 中的 title 属性 --><title th:text="${title}"></title></head>
<body>
<!-- 即 Controller 中的 desc 属性 -->
<h1 th:text="${desc}" th:align="center"></h1><!-- 即 Controller 中的 author 信息 -->
<h2 th:align="center">=====作者信息=====</h2>
<p th:text="${author?.name}"></p>
<p th:text="${author?.age}"></p>
<p th:text="${author?.email}"></p>
</body>
</html>

测试

启动项目,然后在浏览器中访问 http://localhost:8080/index,如果出现下图中的信息,说明整合成功。

在这里插入图片描述

注意事项

为了方便使用,我们在使用 Thymeleaf 模板时,可以添加一些自己的配置。而添加的位置则是项目的配置文件 application.yml,项目默认配置文件应该是 application.properties,但 SpringBoot 更加推荐使用 yml 来配置,所以我们这里需要手动将其改为 yml 的格式。

spring:thymeleaf:cache: falseprefix: classpath:/templates/suffix: .htmlmode: HTMLencoding: UTF-8servlet:content-type: text/html

总结

好了,以上就是我们今天的所有内容了。今天主要介绍了 Themeleaf 的相关简介,然后对利用 SpringBoot 整合 Thymeleaf 的过程进行了描述,最后则是使用 Thymeleaf 中常用的一些相关配置的注意事项。

http://www.lryc.cn/news/405696.html

相关文章:

  • ubuntu20.04安装终端终结者并设置为默认终端
  • 以Zookeeper为例 浅谈脑裂与奇数节点问题
  • 最新版kubeadm搭建k8s(已成功搭建)
  • C++学习笔记-友元函数的定义与使用
  • 熵、交叉熵、KL散度
  • THS配置keepalive(yjm)
  • 新加坡裸机云多IP服务器特性
  • 深入理解ADB:Android调试桥详解与使用指南
  • PACS-医学影像信息管理系统,全影像科室PACS源码,内置包括MPR、CMPR、VR等三维处理功能
  • 无人机搭载无人机反制设备可行性分析
  • MATLAB绘制方波、锯齿波、三角波、正弦波和余弦波、
  • 【通信协议-RTCM】MSM语句(2) - RINEXMSM7语句总结(重要!自动化开发计算卫星状态常用)
  • ios CCUIFont.m
  • 调度子系统在特定时间执行
  • 【QAC】Dashboard服务端如何配置
  • 深入理解Linux网络(四):TCP接收阻塞
  • 【iOS】内存五大分区
  • Jupyter Notebook: 是一个强大的交互式计算
  • 【C#学习笔记】变量、变量类型
  • 题解:T480718 eating
  • MATLAB中matfile用法
  • Spring之Spring Bean的生命周期
  • OSINT 开源情报中的地理定位方法
  • Java面试题系列 - 第17天
  • 开发环境搭建
  • 【NLP】关于参数do_sample的解释
  • Vbox虚拟机+Ubuntu motest测试drm
  • ArcGIS Pro SDK (九)几何 15 转换
  • Spring IOC DI --- 认识IOC DI
  • 常用的python程序汇总——入门级