springboot 整合 thymeleaf
一:用idea 创建 springboot 项目:
详情请参考:《使用IDEA创建一个springboot项目》
二:具体代码内容:
1:看项目代码结构
2:看项目启动访问效果
<--th:text 输出标签--> hello <--th:text 输出标签--> Thymeleaf第一个案例! <--th:value 可以将一个值放入到html的input标签value中--> Thymeleaf第一个案例! <--${#strings.isEmpty(msg)} 判断字符串是否为空--> false <--${#strings.isEmpty(msg)} 判断字符串是否包含某个字符串内容为空--> false <--${#strings.isEmpty(msg)} 判断字符串是否包含某个字符串内容为空:严格区分大小写--> true <--${#strings.isEmpty(msg)} 判断字符串是否包含某个字符串内容为空:严格区分大小写--> false <--${#strings.startsWith(msg)}判断字符串msg 是否以子字符串'a'开头。如果是返回 true反之返回 false.--> false <--${#strings.startsWith(msg)} 判断字符串msg 是否以子字符串'a'开头。如果是返回 true反之返回 false.--> false <--${#strings.endsWith(msg)} 判断字符串msg 是否以子字符串'a'结尾。如果是返回 true反之返回 false.--> false <--${#strings.endsWith(msg)} 判断字符串msg的长度--> 15 <--${#strings.indexOf(msg,'a')} 判断字符串msg中某个指定字符串的下标位置 如果没有找到则返回-1--> 7 <--${#strings.substring(msg,13)} 截取子串,用户与 jdk String 类下 SubString 方法相同--> 例! <--${#strings.substring(msg,13,15)} 截取子串,用户与 jdk String 类下 SubString 方法相同--> 例! <--字符串转大小写--> THYMELEAF第一个案例! <--${#strings.toLowerCase(msg)} 字符串转大小写--> thymeleaf第一个案例! <--${#dates.format(key)} 格式化日期,默认的以浏览器默认语言为格式化标准--> 2021年2月20日 上午12时40分47秒 <--${#dates.format(key,'yyy/MM/dd')} 格式化日期,默认的以浏览器默认语言为格式化标准--> 2021/02/20 <--${#dates.year(key)} 格式化日期,year:取年--> 2021 <--${#dates.month(key)} 格式化日期,Month:取月--> 2 <--${#dates.day(key)} 格式化日期,Day:取日--> 20 <--条件判断 th:if--> 性别:男 <--条件判断 th:switch--> ID 为 1 <--迭代遍历 th:each 迭代 list--> ID Name Age 1 张三 20 2 李四 22 3 王五 24 <--迭代遍历 ht:each 状态变量 状态变量属性 1,index:当前迭代器的索引 从 0 开始 2,count:当前迭代对象的计数 从 1 开始 3,size:被迭代对象的长度 4,even/odd:布尔值,当前循环是否是偶数/奇数 从 0 开始 5,first:布尔值,当前循环的是否是第一条,如果是返回 true 否则返回 false 6,last:布尔值,当前循环的是否是最后一条,如果是则返回 true 否则返回 false --> ID Name Age Index Count Size Even Odd First lase 1 张三 20 0 1 3 false true true false 2 李四 22 1 2 3 true false false false 3 王五 24 2 3 3 false true false true <--迭代遍历 th:each 迭代 Map--> ID Name Age u1=Users{userid=1, username='张三', userage=20} u2=Users{userid=2, username='李四', userage=22} u3=Users{userid=3, username='王五', userage=24} ID Name Age 1 张三 20 2 李四 22 3 王五 24 <--域对象操作--> Request:HttpServletRequest <--HttpSession--> Session:HttpSession <--ServletContext--> Application:Application <-- URL 表达式 th:href th:src url 表达式语法 基本语法:@{} --> URL 类型 绝对路径 绝对路径 相对路径 1)相对于当前项目的根 相对于项目的上下文的相对路径 相对路径 2) 相对于服务器路径的根 相对于服务器的根 在 url 中实现参数传递 相对路径-传参 在 url 中通过 restful 风格进行参数传递 相 对 路 径 -传参-restful
DemoController
package com.alancode.springboot.controller; /** * @author Alan_liu * @Create 2021/2/18 23:03 */ import com.alancode.springboot.pojo.Users; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.*; /** *@program: demo *@description: thymeleaf 入门案例 *@author: Alan_Liu *@create: 2021-02-18 23:03 */ @Controller public class DemoController { @RequestMapping("/show1") public String ShowInfo(HttpServletRequest request, HttpServletResponse response, Model model){ model.addAttribute("msg","Thymeleaf第一个案例!"); model.addAttribute("key",new Date()); model.addAttribute("sex","男"); model.addAttribute("id","1"); List<Users> list = new ArrayList<>(); list.add(new Users(1,"张三",20)); list.add(new Users(2,"李四",22)); list.add(new Users(3,"王五",24)); model.addAttribute("list", list); List<Users> list1 = new ArrayList<>(); list1.add(new Users(1,"张三",20)); list1.add(new Users(2,"李四",22)); list1.add(new Users(3,"王五",24)); model.addAttribute("list1", list1); Map<String, Users> map = new HashMap<>(); map.put("u1", new Users(1,"张三",20)); map.put("u2", new Users(2,"李四",22)); map.put("u3", new Users(3,"王五",24)); model.addAttribute("map", map); request.setAttribute("req", "HttpServletRequest"); request.getSession().setAttribute("sess", "HttpSession"); request.getSession().getServletContext().setAttribute("app","Application"); return "index"; } }
Users
package com.alancode.springboot.pojo; /** * @author Alan_liu * @Create 2021/2/16 21:44 */ /** *@program: SpringBootAddJsp *@description: 用户 *@author: Alan_Liu *@create: 2021-02-16 21:44 */ public class Users { private Integer userid; private String username; private Integer userage; public Integer getUserid() { return userid; } public void setUserid(Integer userid) { this.userid = userid; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Integer getUserage() { return userage; } public void setUserage(Integer userage) { this.userage = userage; } @Override public String toString() { return "Users{" + "userid=" + userid + ", username='" + username + '\'' + ", userage=" + userage + '}'; } public Users() { } public Users(Integer userid, String username, Integer userage) { this.userid = userid; this.username = username; this.userage = userage; } public Users(Integer userid) { this.userid = userid; } public Users(Integer userid, String username) { this.userid = userid; this.username = username; } public Users(String username) { this.username = username; } public Users(String username, Integer userage) { this.username = username; this.userage = userage; } }
ThymeleafApplication
package com.alancode.springboot; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class ThymeleafApplication { public static void main(String[] args) { SpringApplication.run(ThymeleafApplication.class, args); } }
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"/> <title>thymeleaf入门</title> </head> <body> <--th:text 输出标签--> <span th:text="hello"></span> <hr/> <--th:text 输出标签--> <span th:text="${msg}"></span> <hr/> <--th:value 可以将一个值放入到html的input标签value中--> <input type="text" name="username" th:value="${msg}"/> <hr/> <--${#strings.isEmpty(msg)} 判断字符串是否为空--> <span th:text="${#strings.isEmpty(msg)}"></span> <hr/> <--${#strings.isEmpty(msg)} 判断字符串是否包含某个字符串内容为空--> <span th:text="${#strings.contains(msg,'9')}"></span> <br/> <--${#strings.isEmpty(msg)} 判断字符串是否包含某个字符串内容为空:严格区分大小写--> <span th:text="${#strings.contains(msg,'T')}"></span> <br/> <--${#strings.isEmpty(msg)} 判断字符串是否包含某个字符串内容为空:严格区分大小写--> <span th:text="${#strings.contains(msg,'t')}"></span> <br/> <--${#strings.startsWith(msg)}判断字符串msg 是否以子字符串'a'开头。如果是返回 true反之返回 false.--> <span th:text="${#strings.startsWith(msg,'a')}"></span> <br/> <--${#strings.startsWith(msg)} 判断字符串msg 是否以子字符串'a'开头。如果是返回 true反之返回 false.--> <span th:text="${#strings.startsWith(msg,'b')}"></span> <br/> <--${#strings.endsWith(msg)} 判断字符串msg 是否以子字符串'a'结尾。如果是返回 true反之返回 false.--> <span th:text="${#strings.endsWith(msg,'b')}"></span> <br/> <--${#strings.endsWith(msg)} 判断字符串msg的长度--> <span th:text="${#strings.length(msg)}"></span> <br/> <--${#strings.indexOf(msg,'a')} 判断字符串msg中某个指定字符串的下标位置 如果没有找到则返回-1--> <span th:text="${#strings.indexOf(msg,'a')}"></span> <br/> <--${#strings.substring(msg,13)} 截取子串,用户与 jdk String 类下 SubString 方法相同--> <span th:text="${#strings.substring(msg,13)}"></span> <br/> <--${#strings.substring(msg,13,15)} 截取子串,用户与 jdk String 类下 SubString 方法相同--> <span th:text="${#strings.substring(msg,13,15)}"></span> <br/> <--字符串转大小写--> <span th:text="${#strings.toUpperCase(msg)}"></span> <br/> <--${#strings.toLowerCase(msg)} 字符串转大小写--> <span th:text="${#strings.toLowerCase(msg)}"></span> <br/> <hr/> <--${#dates.format(key)} 格式化日期,默认的以浏览器默认语言为格式化标准--> <span th:text="${#dates.format(key)}"></span> <br/> <--${#dates.format(key,'yyy/MM/dd')} 格式化日期,默认的以浏览器默认语言为格式化标准--> <span th:text="${#dates.format(key,'yyy/MM/dd')}"></span> <br/> <--${#dates.year(key)} 格式化日期,year:取年--> <span th:text="${#dates.year(key)}"></span> <br/> <--${#dates.month(key)} 格式化日期,Month:取月--> <span th:text="${#dates.month(key)}"></span> <br/> <--${#dates.day(key)} 格式化日期,Day:取日--> <span th:text="${#dates.day(key)}"></span> <br/> <hr/> <--条件判断 th:if--> <span th:if="${sex} == '男'"> 性别:男 </span> <span th:if="${sex} == '女'"> 性别:女 </span> <hr/> <--条件判断 th:switch--> <div th:switch="${id}"> <span th:case="1">ID 为 1</span> <span th:case="2">ID 为 2</span> <span th:case="3">ID 为 3</span> </div> <hr/> <--迭代遍历 th:each 迭代 list--> <table border="1"> <tr> <th>ID</th> <th>Name</th> <th>Age</th> </tr> <tr th:each="u : ${list}"> <td th:text="${u.userid}"></td> <td th:text="${u.username}"></td> <td th:text="${u.userage}"></td> </tr> </table> <hr/> <--迭代遍历 ht:each 状态变量<br/> 状态变量属性<br/> 1,index:当前迭代器的索引 从 0 开始<br/> 2,count:当前迭代对象的计数 从 1 开始<br/> 3,size:被迭代对象的长度<br/> 4,even/odd:布尔值,当前循环是否是偶数/奇数 从 0 开始<br/> 5,first:布尔值,当前循环的是否是第一条,如果是返回 true 否则返回 false<br/> 6,last:布尔值,当前循环的是否是最后一条,如果是则返回 true 否则返回 false<br/> <br/> --> <table border="1"> <tr> <th>ID</th> <th>Name</th> <th>Age</th> <th>Index</th> <th>Count</th> <th>Size</th> <th>Even</th> <th>Odd</th> <th>First</th> <th>lase</th> </tr> <tr th:each="u1,var : ${list1}"> <td th:text="${u1.userid}"></td> <td th:text="${u1.username}"></td> <td th:text="${u1.userage}"></td> <td th:text="${var.index}"></td> <td th:text="${var.count}"></td> <td th:text="${var.size}"></td> <td th:text="${var.even}"></td> <td th:text="${var.odd}"></td> <td th:text="${var.first}"></td> <td th:text="${var.last}"></td> </tr> </table> <hr/> <--迭代遍历 th:each 迭代 Map--> <table border="1"> <tr> <th>ID</th> <th>Name</th> <th>Age</th> </tr> <tr th:each="maps : ${map}"> <td th:text="${maps}"></td> </tr> </table> <hr/> <table border="1"> <tr> <th>ID</th> <th>Name</th> <th>Age</th> </tr> <tr th:each="maps : ${map}"> <td th:each="entry:${maps}" th:text="${entry.value.userid}" ></td> <td th:each="entry:${maps}" th:text="${entry.value.username}"></td> <td th:each="entry:${maps}" th:text="${entry.value.userage}"></td> </tr> </table> <hr/> <--域对象操作--> Request:<span th:text="${#httpServletRequest.getAttribute('req')}"></span><br/> <hr/> <--HttpSession--> Session:<span th:text="${session.sess}"></span><br/> <hr/> <--ServletContext--> Application:<span th:text="${application.app}"></span> <hr/> <-- URL 表达式<br/> th:href<br/> th:src<br/> url 表达式语法<br/> 基本语法:@{}<br/> --> URL 类型<br/> 绝对路径<br/> <a th:href="@{http://www.baidu.com}">绝对路径</a><br/> 相对路径<br/> 1)相对于当前项目的根<br/> 相对于项目的上下文的相对路径<br/> <a th:href="@{/show}">相对路径</a> 2) 相对于服务器路径的根<br/> <a th:href="@{~/project2/resourcename}">相对于服务器的根</a> 在 url 中实现参数传递<br/> <a th:href="@{/show(id=1,name=zhagnsan)}">相对路径-传参</a> 在 url 中通过 restful 风格进行参数传递<br/> <a th:href="@{/path/{id}/show(id=1,name=zhagnsan)}"> 相 对 路 径 -传参-restful</a> <hr/> </body> </html>
POM。xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.2</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.alanCode.springBoot</groupId> <artifactId>SpringbootAddViewThymeleaf</artifactId> <version>0.0.1-SNAPSHOT</version> <name>SpringbootAddViewThymeleaf</name> <description>SpringbootAddViewThymeleaf</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <!--Springboot 启动器--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </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> </plugin> </plugins> </build> </project>
为人:谦逊、激情、博学、审问、慎思、明辨、 笃行
学问:纸上得来终觉浅,绝知此事要躬行
为事:工欲善其事,必先利其器。
态度:道阻且长,行则将至;行而不辍,未来可期
.....................................................................
------- 桃之夭夭,灼灼其华。之子于归,宜其室家。 ---------------
------- 桃之夭夭,有蕡其实。之子于归,宜其家室。 ---------------
------- 桃之夭夭,其叶蓁蓁。之子于归,宜其家人。 ---------------
=====================================================================
* 博客文章部分截图及内容来自于学习的书本及相应培训课程以及网络其他博客,仅做学习讨论之用,不做商业用途。
* 如有侵权,马上联系我,我立马删除对应链接。 * @author Alan -liu * @Email no008@foxmail.com
转载请标注出处! ✧*꧁一品堂.技术学习笔记꧂*✧. ---> https://www.cnblogs.com/ios9/
学问:纸上得来终觉浅,绝知此事要躬行
为事:工欲善其事,必先利其器。
态度:道阻且长,行则将至;行而不辍,未来可期
.....................................................................
------- 桃之夭夭,灼灼其华。之子于归,宜其室家。 ---------------
------- 桃之夭夭,有蕡其实。之子于归,宜其家室。 ---------------
------- 桃之夭夭,其叶蓁蓁。之子于归,宜其家人。 ---------------
=====================================================================
* 博客文章部分截图及内容来自于学习的书本及相应培训课程以及网络其他博客,仅做学习讨论之用,不做商业用途。
* 如有侵权,马上联系我,我立马删除对应链接。 * @author Alan -liu * @Email no008@foxmail.com
转载请标注出处! ✧*꧁一品堂.技术学习笔记꧂*✧. ---> https://www.cnblogs.com/ios9/