它是一个服务器模板渲染引擎,搭配着servlet一起使用。
Thymeleaf用法和作用
可以用来进行制作动态页面,它的用法就是通过一个servlet的转发,然后thymeleaf渲染生效,得到的结果是动态的,可以和我们的数据库进行很好的交互,其中最重要的语法就是${},然后还有一些特定的属性,可以调用实现我们的功能,它也是一个html文件,只是在此基础上通过了servlet处理。
Thymeleaf注意的地方
super.processTemplate(target, req, resp);这句代码一定要在最末尾,因为这句代码已经把servlet跳转到html页面了,当我们还在后面写内容的时候,已经不起作用了。
这一句加不加的作用在于,加上时我们在写关于thymeleaf的标签和语法时,会有提示,方便一些
页面取值有三种容易混淆的地方
首先是访问域对象(会话域,请求域,应用域),由req,session,servletContext设置的属性值,在页面上分别是直接取属性的键,通过session,通过application取值,如图:
<span th:text="${username}"></span>
<span th:text="${session.username}"></span>
<span th:text="${application.username}"></span>
req.setAttribute("username","张三");
HttpSession session = req.getSession();
session.setAttribute("username","张三");
ServletContext servletContext = getServletContext();
servletContext.setAttribute("username","张三");
其次是页面获取请求参数,是通过设置的thymeleaf网页名来获取
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>我是param网页</h1>
<p th:text="${param.username}">获取请求参数的值</p>
</body>
</html>
<p th:text="${param.username}">获取请求参数的值</p>
最后是设置一个对象来通过键->对象->属性取值(这是也就是普通的取属性值,但是它的属性值是一个对象)
学生姓名:<span th:text="${student.studentName}"></span><br>
学生姓名:<span th:text="${student.getStudentName()}"></span><br>
学生课程:<span th:text="${student.subject.subjectName}"></span><br>
学生课程:<span th:text="${student.getSubject().getSubjectName()}"></span><br>
学生学校:<span th:text="${student.schoolList.get(0).schoolName}"></span><br>
学生学校:<span th:text="${student.getSchoolList().get(1).getSchoolName}"></span><br>
学生老师:<span th:text="${student.teacherMap.get('A1').teacherName}"></span><br>
学生老师:<span th:text="${student.teacherMap.get('C3').teacherName}"></span><br>
package com.sun.servlet;
import com.sun.bean.School;
import com.sun.bean.Student;
import com.sun.bean.Subject;
import com.sun.bean.Teacher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@WebServlet("/OgnlServlet")
public class OgnlServlet extends ViewBaseServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Subject subject=new Subject("JAVAEE课程");
School school1=new School("湖北理工学院");
School school2=new School("湖北师范学院");
List<School> schoolList=new ArrayList<>();
schoolList.add(school1);
schoolList.add(school2);
Map<String, Teacher> teacherMap=new HashMap<>();
Teacher teacher1=new Teacher("张老师");
Teacher teacher2=new Teacher("陈老师");
teacherMap.put("A1",teacher1);
teacherMap.put("C3",teacher2);
Student student=new Student("小明",subject,schoolList,teacherMap);
req.setAttribute("student",student);
super.processTemplate("ognl",req,resp);
}
}
Thymeleaf和Servlet的关系
Thymeleaf和Servlet是两个在Java Web开发中常用的技术,它们通常一起使用来构建动态的Web应用程序。 Servlet是Java EE平台的一部分,用于处理Web请求和生成Web响应。它提供了一种在服务器端生成动态内容的方式,可以接收来自客户端的HTTP请求,并生成相应的HTTP响应。
Servlet通常用于处理业务逻辑、数据库交互等任务,并生成HTML等内容返回给客户端。Thymeleaf是一种服务器端模板引擎,它允许开发人员在HTML模板中嵌入动态内容,并在服务器端进行渲染。Thymeleaf模板可以包含动态的表达式、条件判断、迭代等功能,使得开发人员能够更加灵活地生成动态内容。Thymeleaf通常用于生成HTML页面,以便在客户端展示。 在实际的Web应用程序开发中,Servlet通常用于处理请求、调用业务逻辑,然后将数据传递给Thymeleaf模板引擎进行渲染,最终生成动态的HTML页面返回给客户端。这种方式使得开发人员能够将业务逻辑和页面展示分离,提高了代码的可维护性和可扩展性。
简单来说:就是servlet处理请求,然后将处理好的结果给thymeleaf做一层华丽的包装生成动态内容。