首先先介绍一下thymeleaf
,它是一种模板引擎技术,它和javaweb
中的jsp
很相似,不过thymeleaf
可以搭配springboot进行使用
,将它结合springboot
搭建个人的博客是一个不错的选择。
对于 thymeleaf
的语法和之前接触的编程语言的语法差不多,如c,java等。
我是在准备搭建自己的博客的过程中的,发现一个项目使用到了thymeleaf
,最终发现对于写个人博客这样的小型项目确实不错。
下面将通过一个简单的例子快速的将thymeleaf
和springboot
进行整合。
首先在ideal中创建一个普通的maven项目
在pom.xml中导入thymeleaf的坐标
<dependency>
<groupId>org.thymeleafgroupId>
<artifactId>thymeleafartifactId>
<version>3.0.15.RELEASEversion>
dependency>
package com.wei;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
/**
* @author weijiangquan
* @date 2022/6/5 -13:41
* @Description
*/
public class HelloThymeleaf {
public static void main(String[] args) {
//创建模板引擎
TemplateEngine engine = new TemplateEngine();
//准备模板
String input = "";
//准备数据,使用Context
Context context = new Context();
//调用引擎,处理模板和数据
String out = engine.process(input,context);
System.out.println("结果数据:"+out);
}
}
运行结果如下
代码如下
package com.wei;
import org.junit.Test;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
/**
* @author weijiangquan
* @date 2022/6/5 -13:49
* @Description 模板使用数据
*/
public class MyTest {
@Test
public void test1(){
TemplateEngine engine = new TemplateEngine();
String inStr = "";
Context context = new Context();
context.setVariable("name","你好啊"); //setVariable 是设置变量的意思
String process = engine.process(inStr, context);
System.out.println("html="+process);
}
}
DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
<input type="text" th:value="${name}"/>
body>
html>
编写测试类
@Test
public void test02(){
TemplateEngine engine = new TemplateEngine();
//读取磁盘中的模板文件
ClassLoaderTemplateResolver resolver = new ClassLoaderTemplateResolver();
//设置引擎使用 resolver
engine.setTemplateResolver(resolver);
//指定数据
Context context = new Context();
context.setVariable("name","王五");
//处理模板
String html = engine.process("main.html", context);
System.out.println("html="+html);
}
@Test
public void test03(){
TemplateEngine engine = new TemplateEngine();
ClassLoaderTemplateResolver resolver = new ClassLoaderTemplateResolver();
resolver.setPrefix("templates/"); //设置前缀
resolver.setSuffix(".html"); //设置后缀
engine.setTemplateResolver(resolver);
Context context = new Context();
context.setVariable("name","小卫");
engine.process("index",context);
String html = engine.process("index",context);
System.out.println(html);
}
index.html文件
DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
<input type="text" th:value="${name}"/>
body>
html>
创建一个springboot项目
spring.thymeleaf.cache=false
spring.thymeleaf.mode=HTML
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
测试代码
package com.wei.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
/**
* @author weijiangquan
* @date 2022/6/5 -14:40
* @Description
*/
@Controller
public class HelloController {
/**
* @param model 可以存放数据,放入到request作用域
* @return String 表示视图
*/
@RequestMapping("/hello")
public String hello(Model model, HttpServletRequest request){
//添加数据
// model.addAttribute("name","小王");
request.setAttribute("name","张三");
//指定模板视图
return "index";
}
}
html中的代码如下
启动项目之后,在浏览器中输入localhost:8080/hello
进行访问
目录结构如下
package com.wei.controller;
import com.wei.vo.School;
import com.wei.vo.Student;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* @author weijiangquan
* @date 2022/6/5 -16:47
* @Description
*/
@Controller
public class ExpressController {
@RequestMapping("/express_var")
public String express_var(Model model){
//添加简单基本类型
model.addAttribute("myName","张三");
model.addAttribute("myAge",20);
//添加对象类型
Student student = new Student();
student.setId(1001);
student.setAge(12);
student.setEmail("wei@qq.com");
student.setName("小张");
student.sex = "男";
//创建school对象
School school = new School();
school.setSchname("东京大学");
school.setSchaddress("北京");
student.setSchool(school);
model.addAttribute("student",student);
return "var1";
}
}
package com.wei.vo;
/**
* @author weijiangquan
* @date 2022/6/5 -16:50
* @Description
*/
public class Student {
private Integer id;
private String name;
private String email;
private Integer age;
public String sex;
private School school;
public School getSchool() {
return school;
}
public void setSchool(School school) {
this.school = school;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", email='" + email + '\'' +
", age=" + age +
'}';
}
}
package com.wei.vo;
/**
* @author weijiangquan
* @date 2022/6/5 -17:19
* @Description
*/
public class School{
private String schname;
private String schaddress;
public String getSchname() {
return schname;
}
public void setSchname(String schname) {
this.schname = schname;
}
public String getSchaddress() {
return schaddress;
}
public void setSchaddress(String schaddress) {
this.schaddress = schaddress;
}
}
var1.html
DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
head>
<meta charset="UTF-8">
<title>变量表达式title>
<body>
<p>获取简单数据类型的数据p>
<p th:text="${myName}">p>
<p th:text="${myAge}">p>
<br/>
<p>对象类型的属性p>
<p th:text="${student.id}">idp>
<p th:text="${student.name}">namep>
<p th:text="${student.email}">emailp>
<p th:text="${student.age}">agep>
<br>
<div>性别: <span th:text="${student.sex}">span>div>
<br/>
<div>
学校名称:<span th:text="${student.school.schname}">span>
div>
body>
html>
DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>@{}链接地址title>
head>
<body>
<p>链接表达式p>
<a th:href="@{queryStudent}">1.@{queryStudent}a>
<br/>
<a th:href="@{./queryStudent}">2. ./queryStudenta>
<br>
<a th:href="@{../user/list}">3. ../queryStudenta>
<br>
<a th:href="@{/user/home}">4. /user/homea>
<br>
<a th:href="@{http://www.baidu.com}">5. http://www.baidu.coma>
<br>
body>
html>
数字文本就是:数字,算术运算也可用:+,-,*,/和%,表达式中的值可以进行比较>,<,>=和<=符号,以及和!=可以被用来检查是否相等。一些符合需要使用实体
gt(>)
,lt()
,ge(>=)
,le(<=)
,not(!)
。还有eq(),neq(!=)
@GetMapping("/bool")
public String doBool(Model model){
model.addAttribute("age",16);
model.addAttribute("married",true);
return "bool";
}
模板中为null或"'就不会显示
属性 | 作用 |
---|---|
th:text | 计算其值表达式并将结果设置为标签的标签体 |
th:utext | th:text 会对结果中特殊字符进行转义,th:utext不会 |
th:attr | 为标签中任意属性设置,可以一次设置多个属性 |
th:* | 为html指定的属性设值,一次设置一个 |
上面通过一个例子将thymeleaf
的基本使用和一些常用的语法进行了说明,如果想要知道更多关于thymeleaf
的知识和用法,可以进行官网进行更加深入的学习。