Thymeleaf 原生使用
转载
Thymeleaf简介
- Thymeleaf是一个HTML模板引擎
- 功能是将一个HTML文件作为模板,并根据模板中的特定标记,对模板中的内容进行修改或替换,最后形成一个新的HTML。
为什么要使用Thymeleaf
- 现在我们使用Servlet接收用户提交的请求,但是使用Servlet输出响应内容非常麻烦
- 如果编写一个HTML作为模板,使用Thymeleaf修改或替换指定的内容,再输出这个页面,那么就可以响应出复杂的页面
Thymeleaf使用注意事项
- HTML模板文件中的html标签属性必须按照规定编写
- java代码中所有相关类均导包自org.thymeleaf包下
Thymeleaf运行原理
- java通过Thymeleaf模板引擎,先将HTML模板读取到java,然后将模板中带有"th:"的部分根据特定的含义修改或者替换为Context对象中对应的内容
示例:
将ht1.html中的最后一个张飞替换成赵云
pom.xml中引入jab包thymeleaf
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>3.0.11.RELEASE</version>
</dependency>
src/main/resources/th1.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>模板引擎</title>
</head>
<body>
<ul>
<li>刘备</li>
<li>关羽</li>
<li>张飞</li>
<li th:text=${name}>张飞</li>
</ul>
</body>
</html>
src/main/java/Th1Servlet.java
package cn.tedu.controller;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver;
import cn.tedu.utils.ThUtils;
public class Th1Servlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = "赵云";
// 创建模板引擎对象
TemplateEngine te = new TemplateEngine();
// 创建配置对象
ClassLoaderTemplateResolver r = new ClassLoaderTemplateResolver();
// 设置字符集
r.setCharacterEncoding("UTF-8");
// 将引擎和配置对象关联
te.setTemplateResolver(r);
// 创建上下文对象 用于装载数据的容器
Context context = new Context();
context.setVariable("name", name);
// 把容器里面的数据替换到模板页面中
String html = te.process("th1.html", context);
// 响应
response.setContentType("text/html;charset=utf-8");
PrintWriter pw = response.getWriter();
pw.print(html);
pw.close();
// 使用工具类写法
// Context context = new Context();
// context.setVariable("name", name);
// ThUtils.write("th1.html", context, response);
}
}
封装Thymeleaf上述代码
- Thymeleaf代码在实现过程中有大量的代码重复
- 通过简单的封装将代码中那些完全重复的代码封装到一个新的类中,方便调用
示例:
在utils工具包中创建ThUtils.java类
package cn.tedu.utils;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver;
public class ThUtils {
private static TemplateEngine te;
static {
// 创建模板引擎对象
te = new TemplateEngine();
// 创建配置对象
ClassLoaderTemplateResolver r = new ClassLoaderTemplateResolver();
// 设置字符集
r.setCharacterEncoding("UTF-8");
// 将引擎和配置对象关联
te.setTemplateResolver(r);
}
public static void write(String fileName,Context context,HttpServletResponse resp) throws IOException {
// 将容器里面的数据替换到模板页面中
String html = te.process(fileName, context);
// 响应
resp.setContentType("text/html;charset=utf-8");
PrintWriter pw = resp.getWriter();
pw.print(html);
pw.close();
}
}