spring boot + thymeleaf整合完整例子

以下是一个完整的 Spring Boot + Thymeleaf 整合示例,包含项目结构、代码和运行说明:


1. 项目依赖配置(Maven)

pom.xml 中添加 Thymeleaf 依赖:

<dependencies><!-- Spring Boot Web Starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Thymeleaf Starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><!-- Spring Boot DevTools (可选,用于热更新) --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope></dependency>
</dependencies>

2. 项目结构

src/
├── main/
│   ├── java/
│   │   └── com.example.demo/
│   │       ├── DemoApplication.java      // 启动类
│   │       └── controller/               // 控制器包
│   │           └── HelloController.java  // 示例控制器
│   └── resources/
│       ├── static/                       // 静态资源(CSS/JS)
│       ├── templates/                    // Thymeleaf 模板文件
│       │   └── hello.html               // 示例模板
│       └── application.properties        // 配置文件(可选)
└── test/└── ...                               // 测试代码

3. 启动类(DemoApplication.java)

package com.example.demo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}

4. 控制器(HelloController.java)

package com.example.demo.controller;import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;@Controller
public class HelloController {@GetMapping("/hello")public String hello(Model model) {// 向模板传递数据model.addAttribute("name", "Thymeleaf");model.addAttribute("users", new String[]{"Alice", "Bob", "Charlie"});return "hello"; // 对应 templates/hello.html}
}

5. Thymeleaf 模板(hello.html)

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><title>Thymeleaf Example</title>
</head>
<body><h1 th:text="'Hello, ' + ${name} + '!'">Default Text</h1><!-- 条件判断 --><p th:if="${users.size() > 0}">Users list:</p><ul><!-- 遍历用户列表 --><li th:each="user : ${users}" th:text="${user}"></li></ul><!-- 表单示例 --><form action="#" th:action="@{/submit}" method="post"><input type="text" th:field="*{username}" placeholder="Enter name"><button type="submit">Submit</button></form>
</body>
</html>

6. 配置(application.properties 可选)

# Thymeleaf 配置(可选,默认配置已足够)
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
spring.thymeleaf.mode=HTML
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.cache=false # 开发时关闭缓存

7. 运行与验证

  1. 启动应用:运行 DemoApplicationmain 方法。
  2. 访问 http://localhost:8080/hello,页面显示:
    • 标题:Hello, Thymeleaf!
    • 用户列表:Alice, Bob, Charlie
    • 表单输入框

关键点总结

功能实现方式
模板路径src/main/resources/templates/ 目录下的 HTML 文件,后缀为 .html.xhtml
数据绑定通过 Model 对象传递数据到模板,使用 ${variable} 语法引用变量
条件渲染th:if, th:unless 控制元素显示
循环遍历th:each 遍历集合数据
表单绑定th:field 自动绑定表单字段到后端对象

扩展示例:带表单提交的控制器

@Controller
public class FormController {@GetMapping("/form")public String showForm(Model model) {model.addAttribute("user", new User()); // 表单对象return "form";}@PostMapping("/submit")public String submitForm(@ModelAttribute User user) {// 处理提交数据return "redirect:/success";}
}

对应的表单模板 form.html

<form th:object="${user}" action="#" th:action="@{/submit}" method="post"><input type="text" th:field="*{name}" placeholder="Name"><input type="email" th:field="*{email}" placeholder="Email"><button type="submit">Submit</button>
</form>

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux一步部署主DNS服务器

#!/bin/bash #部署DHCP服务 #userli 20250319 if [ "$USER" ! "root" ] then echo "错误&#xff1a;非root用户&#xff0c;权限不足&#xff01;" exit 0 fi #防火墙与高级权限 systemctl stop firewalld && systemctl disable …

Softmax 回归 + 损失函数 + 图片分类数据集

Softmax 回归 softmax 回归是机器学习另外一个非常经典且重要的模型&#xff0c;是一个分类问题。 下面先解释一下分类和回归的区别&#xff1a; 简单来说&#xff0c;分类问题从回归的单输出变成了多输出&#xff0c;输出的个数等于类别的个数。 实际上&#xff0c;对于分…

视频管理平台-信息泄露漏洞

一&#xff1a;漏洞描述 EasyCVR 部分版本存在用户信息泄露漏洞&#xff0c;攻击者可直接通过此漏洞获取所有用户的账号密码。 二&#xff1a;fofa查询 title"EasyCVR" 三&#xff1a;漏洞复现 在fofa中寻找有漏洞的url 并访问 poc:/api/v1/userlist?pageinde…

gz sim机器人SDF模型 [持续更新]

机器人SDF模型 linklink的一级pose材质 plugin话题信息通信键盘操作plugin Sensor传感器imu 不算教学&#xff0c;个人的记录 sdf的格式跟urdf有所不同&#xff0c;必须是完整的一个包括&#xff0c;比如< pose></ pose>这样前一个后一个&#xff0c;urdf中是有<…

极速全场景 MPP数据库starrocks介绍

目录 一、引子 二、起源 &#xff08;一&#xff09;前身 &#xff08;二&#xff09;定位 三、特点 &#xff08;一&#xff09;高性能架构 &#xff08;二&#xff09;实时分析 &#xff08;三&#xff09;高并发与扩展性 &#xff08;四&#xff09;兼容性与生态 …

计算机二级(C语言)考试高频考点总汇(二)—— 控制流、函数、数组和指针

目录 六、控制流 七、函数 八、数组和指针 六、控制流 76. if 语句可以&#xff08;嵌套&#xff09;&#xff0c; if 语句可以嵌套在另一个 if 语句内部&#xff0c;形成&#xff08;嵌套的条件判断结构&#xff09;&#xff0c;用于处理更复杂的条件判断逻辑。 77. els…

ECharts各类炫酷图表/3D柱形图

一、前言 最近鸡米花实现了各类的炫酷的图表&#xff0c;有3D柱形图、双边柱形图以及异形柱形图&#xff0c;好了&#xff0c;直接上图&#xff1a; 二、效果图 一个个来吧&#xff0c;下面就是代码啦&#xff0c;注意&#xff0c;一下图表展示的宽高均为800px*300px 三、异形横…

2024年3月全国计算机等级考试真题(二级C语言)

&#x1f600; 第1题 下列叙述中正确的是 A. 矩阵是非线性结构 B. 数组是长度固定的线性表 C. 对线性表只能作插入与删除运算 D. 线性表中各元素的数据类型可以不同 题目解析&#xff1a; A. 矩阵是非线性结构 错误。矩阵通常是二维数组&#xff0c;属…

从零构建大语言模型全栈开发指南:第三部分:训练与优化技术-3.2.3预训练任务设计:掩码语言建模(MLM)与下一句预测(NSP)

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 3.2.3 预训练任务设计:`掩码语言建模(MLM)`与下一句预测(NSP)1. 掩码语言建模(`Masked Language Modeling, MLM`)1.1 MLM的核心原理与数学形式1.2 高级掩码优化技术1.2.1 `Span Masking(SpanBER…

DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例6,TableView16_06 分页表格拖拽排序

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

大模型训练步骤:预训练;增量预训练;微调;RLHF或者DPO

参考&#xff1a;https://blog.csdn.net/chengxuyuanyy/article/details/140949825 开发阶段分类 模型分成3个阶段: (1)、第一阶段:(Continue PreTraining)增量预训练&#xff0c;在海量领域文档数据上二次预训练GPT模型&#xff0c;以注入领域知识。 (2)、第二阶段: SFT(Sup…

多网络选择路由(windows环境)

问题 情况是这样的&#xff0c;公司环境需要连接网线才能连接内网&#xff0c;也能上网&#xff0c;但是网速贼慢&#xff0c;我就连接了自己的热点&#xff0c;但是还是很慢&#xff0c;但是一拔掉网线就快了&#xff0c;但是连不上内网环境了。 解决思路 我猜我访问外网时…

idea解决properties中文乱码

问题&#xff1a; 我的IDEA已经将文件的字符集设置成了UTF-8&#xff0c;但是中文在*.properties文件中还是会出现乱码&#xff0c;后来经同事指点修改了一项配置就ok了&#xff01;话不多说&#xff0c;看下面的对比就清楚了。 设置方法&#xff1a; Settings -> Editor…

BKA-CNN-GRU、CNN-GRU、GRU、CNN四模型多变量时序预测(Matlab)

BKA-CNN-GRU、CNN-GRU、GRU、CNN四模型多变量时序预测&#xff08;Matlab&#xff09; 目录 BKA-CNN-GRU、CNN-GRU、GRU、CNN四模型多变量时序预测&#xff08;Matlab&#xff09;预测效果基本介绍程序设计参考资料 预测效果 基本介绍 BKA-CNN-GRU、CNN-GRU、GRU、CNN四模型多…

V8内存的限制

如大家所熟悉的&#xff0c;在一般的后端开发语言中&#xff0c;在基本的内存使用上没有什么限制&#xff0c;然而在 Node 中通过JavaScript 使用内存时就会发现只能使用部分内存&#xff08;64 位系统写约 1.4GB&#xff0c;32 位系统下约为 0.7GB&#xff09;。 在这样的限制…

【RabbitMQ】

课程背景 一.初始MQ 1.同步调用 2.异步调用 1.解耦合&#xff1a;如果需要扩展业务&#xff0c;那就扩呗&#xff0c;让扩展的服务去监听消息队列就可以了 2.无需等待&#xff1a;只管发消息&#xff0c;发完就不管了&#xff0c;干别的事去了 3.故障隔离&#xff1a;接收消息…

emWin图片旋转

图片取模&#xff1a; 源码&#xff1a; /* ********************************************************************************************************* * 声明图片 *********************************************************…

ElasticSearch在Windows单节点部署及使用

文章目录 初始化ES服务下载启动验证 Kibana可视化使用ES下载启动验证使用创建第一个索引添加文档查询文档 ES优点 初始化ES服务 下载启动 访问官网https://www.elastic.co/downloads/elasticsearch 点击Windows&#xff0c;开始下载elasticsearch-8.17.4-windows-x86_64.zip…

Qt弹出新窗口并关闭(两个按钮)

参考&#xff1a;Qt基础 练习&#xff1a;弹出新窗口并关闭的两种实现方式&#xff08;两个按钮、一个按钮&#xff09;_qt打开一个窗口另一个关闭-CSDN博客 实现&#xff1a;两个按钮&#xff0c;点击第一个按钮open window打开一个新窗口&#xff0c;点击第二个窗口close wi…

今日 GitHub 热门项目大赏,你 pick 谁?

GitHub 作为全球最大的开源代码托管平台&#xff0c;每天都有无数新奇且强大的项目涌现。今天就为大家精选几个不容错过的热门项目。 微软开源 Hyperlight Wasm&#xff1a;WebAssembly 的新力量 项目地址&#xff1a;hyperlight-wasm 微软开源的 Hyperlight Wasm&#xff0c…