springboot 项目结构 + thymeleaf + JSON
一.springboot 项目结构

@Controller:这里将PageController类标记为SpringMVC的控制器,负责接收和处理HTTP请求
@RequestMapping("/page22"):作用是将 HTTP 请求路径 /page22 映射到下面的 page2() 方法
(当用户在浏览器或前端发起 http://xxx/page22 请求时,Spring 就会调用这个方法来处理)
System.out.println("page2"):当 page2() 方法被调用时,会在控制台打印 page2,方便你确认方法是否被执行。
return "page2":Spring Boot 会自动将这个逻辑视图名解析为page2.html 文件,然后渲染这个页面并返回给用户。
完整执行流程
1.用户访问 http://xxx/page22
2.Spring 通过 @RequestMapping 匹配到 page2() 方法
3.控制台打印 page2
4.返回 "page2",框架找到 templates/page2.html 并渲染
5.最终将 page2.html 页面展示给用户


输入前端超链接里的username,password值会传到PageController类中,
作为page2()方法的参数,即作为dataMap的值,
在dataMap.put(“username”,username)中传递给“username”,”password”,
“username”,”password”再将值映射到前端.xml文件中并渲染,
最终将 page2.html 页面展示给用户
二.thymeleaf (动态渲染)
1.文本替换渲染
<div th:text="'你好'+${name}"></div>
${name}:取后端 Model/Map 传递的name变量值
2.条件渲染
<div th:if="${sex}">男</div>
<div th:unless="${sex}">女</div>
<div th:if="${age}>=18">成年人</div>
<div th:unless="${age}>=18">未成年</div>
语法拆解
th:if="${sex}":条件为true时,渲染当前<div>(显示男);th:unless="${sex}":等价th:if="!${sex}",条件为false时,渲染当前<div>(显示女);${sex}:取后端Model/Map传递的布尔类型sex变量(true/false)。
3.循环渲染
<div th:each="str:${nameList}">
<span th:text = "${str}"></span>
</div>
-
th:each是 Thymeleaf 的循环标签,这里会遍历 nameList 集合,每次循环把当前元素赋值给变量 str。
每循环一次,就会生成一个新的标签。 -
th:text会把变量 str 的值作为纯文本填充到 标签里,也就是显示当前循环到的 nameList 中的元素。<div th:text="${dataMap.username}"></div> <div th:text="${dataMap.password}"></div>
4.Thymeleaf 嵌套Map取值
核心作用
从后端传递的嵌套Map(dataMap)中,分别取出username和password的值,渲染为纯文本展示在页面上。
语法拆解
th:text:Thymeleaf文本渲染属性,覆盖标签内容,展示纯文本;${dataMap.username}:等价${dataMap.get("username")},先取后端的dataMap对象,再获取其内部username键对应的值;${dataMap.password}:同上,取dataMap内部password键对应的值。
三.JSON
1.格式
{
"id": 1,
"username": "zhangsan",
"password": "123456",
"roles": ["admin", "user"]
}
2.使用
对json数据的处理
@RequestBody加上后 可json字符串传递值(前端到后端) 对参数修饰
@ResponseBody 加上后 后端传前端 对类的修饰 返回值只会使数据