ThymeLeaf是什么

Thymeleaf是一个用于服务器端的java模板引擎,它使用简单但功能强大,目前可以处理的模板类型包括:HTML、XML、TEXT、JavaScript、CSS等。

搭建thymeleaf开发环境

首先创建一个Maven web项目,pom文件依赖信息如下:

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency> <dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>3.0.7.RELEASE</version>
</dependency> <dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>

可见,thymeleaf的依赖并不复杂,它只需要一个库文件。

TemplateEngin、ITemplateResolver和IContext

这三个组件构成thymeleaf的核心:

  • ITemplateResolver用于设置模板引擎,例如模板的存放目录,模板的后缀,是否开启模板缓存等等。
  • TemplateEngine用于解析模板。
  • IContext用于保存模板中需要的一些变量。例如要把变量传递到模板中,就可以先把变量放入IContext的实现类中,然后在模板中获取该变量的值。

一个简单的thymeleaf使用例子

为了让程序代码尽可能简单,这里只使用最基本的servlet处理web请求。

创建Servlet

servlet代码如下,它只是一个简单的servlet,没有什么功能:

@WebServlet(urlPatterns="/index")
public class IndexServlet extends HttpServlet {
private static final long serialVersionUID = 1L; @Override
public void init() throws ServletException {
super.init();
} @Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
} @Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
} }

引入模板引擎属性

要使模板引擎可以工作,至少需要创建TemplateEngine类和ITemplateResolver接口的实例,因此在刚才创建的servlet中创建两个类属性, 如下:

@WebServlet(urlPatterns="/index")
public class IndexServlet extends HttpServlet {
private static final long serialVersionUID = 1L; TemplateEngine templateEngine;
ServletContextTemplateResolver templateResolver; //其他servlet方法
}

初始化模板引擎

这一步可以在servlet的init方法中初始化上面加入的两个属性。一般情况下,模板解析器有一些默认值,例如它默认以html方式解析模板。但是,模板的保存路径和后缀是空的,这两个必须由我们自己设置。

@Override
public void init() throws ServletException {
super.init(); templateEngine = new TemplateEngine();
templateResolver = new ServletContextTemplateResolver(getServletContext());
templateResolver.setPrefix("/WEB-INF/templates"); //模板位置
templateResolver.setSuffix(".html"); //模板扩展名 templateEngine.setTemplateResolver(templateResolver);
}

其中prefix就是模板保存的路径,suffix就是模板的扩展名(后缀)。

使用WebContext

WebContext是IContext的其中一个实现类,它的基本作用是保存变量。

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { WebContext context = new WebContext(request, response, getServletContext()); //添加变量message到context
context.setVariable("message", "hello thymeleaf"); //解析模板并显示到浏览器
templateEngine.process("home", context, response.getWriter());
}

当请求到来的时候,我们创建一个上下文对象用于保存变量,将来可以在模板中获取变量的值。

TemplateEngine的process方法用于解析模板并利用当前response对象的writer把模板输出到浏览器。

整个过程是非常简单清晰的。

在模板中获取变量的值

home.html文件内容:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3 th:text="${message}">this is a greeting</h3>
</body>
</html>

代码中的核心是th:text标签和${message}占位符,它们用于把从上下文中获取到的变量值替换掉当前标签的文本,这里是:this is a greeting

完整代码:

pom.xml

<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 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.sharpcode</groupId>
<artifactId>learnthymeleaf</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>learnthymeleaf Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency> <dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>3.0.7.RELEASE</version>
</dependency> <dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies> <build>
<finalName>learnthymeleaf</finalName> <plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</build> </project>

IndexServlet

@WebServlet(urlPatterns = "/home")
public class IndexServlet extends HttpServlet {
private static final long serialVersionUID = 1L; TemplateEngine templateEngine;
ServletContextTemplateResolver templateResolver; @Override
public void init() throws ServletException {
super.init(); templateEngine = new TemplateEngine(); templateResolver = new ServletContextTemplateResolver(getServletContext());
templateResolver.setPrefix("/WEB-INF/templates/");
templateResolver.setSuffix(".html"); templateEngine.setTemplateResolver(templateResolver);
} @Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { WebContext context = new WebContext(request, response, getServletContext()); // 添加变量message到context
context.setVariable("message", "hello thymeleaf"); // 解析模板并显示到浏览器
templateEngine.process("home", context, response.getWriter());
} @Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
} }

thymeleaf模板引擎入门的更多相关文章

  1. SpringBoot入门篇--使用Thymeleaf模板引擎进行页面的渲染

    在做WEB开发的时候,我们不可避免的就是在前端页面之间进行跳转,中间进行数据的查询等等操作.我们在使用SpringBoot之前包括我在内其实大部分都是用的是JSP页面,可以说使用的已经很熟悉.但是我们 ...

  2. Thymeleaf 模板引擎简介

    目录 Thymeleaf 模板引擎 官方文档下载 Hello World 新建应用 后台控制器 前端页面 浏览器访问测试 Thymeleaf 模板引擎1.Thymeleaf 是 Web 和独立环境的现 ...

  3. SpringBoot--- Shiro(拦截,认证)、Thymeleaf(模板引擎)

    SpringBoot--- Shiro(拦截,认证).Thymeleaf(模板引擎) 环境 IDEA :2020.1 SpringBoot: 2.3.3 Java : 8 版本依赖: ​ shiro- ...

  4. 狂神说SpringBoot11:Thymeleaf模板引擎

    狂神说SpringBoot系列连载课程,通俗易懂,基于SpringBoot2.2.5版本,欢迎各位狂粉转发关注学习. 微信公众号:狂神说(首发)    Bilibili:狂神说Java(视频) 未经作 ...

  5. (二)SpringBoot基础篇- 静态资源的访问及Thymeleaf模板引擎的使用

    一.描述 在应用系统开发的过程中,不可避免的需要使用静态资源(浏览器看的懂,他可以有变量,例:HTML页面,css样式文件,文本,属性文件,图片等): 并且SpringBoot内置了Thymeleaf ...

  6. 【Springboot】Springboot整合Thymeleaf模板引擎

    Thymeleaf Thymeleaf是跟Velocity.FreeMarker类似的模板引擎,它可以完全替代JSP,相较与其他的模板引擎,它主要有以下几个特点: 1. Thymeleaf在有网络和无 ...

  7. 三、thymeleaf模板引擎构建前台html, 后台使用 ModelAndView 和 Model 模型

    项目源码:https://github.com/y369q369/springBoot.git      ->     thymeleaf 私聊QQ: 1486866853 1.pom.xml中 ...

  8. SpringBoot使用thymeleaf模板引擎

    (1).添加pom依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactI ...

  9. Spring Boot 2.0 整合Thymeleaf 模板引擎

    本节将和大家一起实战Spring Boot 2.0 和thymeleaf 模板引擎 1. 创建项目 2. 使用Spring Initlizr 快速创建Spring Boot 应用程序 3. 填写项目配 ...

随机推荐

  1. Centos操作系统在虚拟机VMware上的安装

    1.下载centos操作系统,提供百度云盘链接:http://pan.baidu.com/s/1pLHOR03 2.打开上篇在VMware中新建好的空白虚拟机,将centos安装在此空白虚拟机上,步骤 ...

  2. jquery.load问题

    简单Jquery--Ajax应用 作为一个新手,最近自己写了一个人主页,虽然性能不怎么样,但就出现的各种大的小的问题拿出来与大家分享分享. ----DanlV 描述 错误描述 自己不知道什么原因,直接 ...

  3. Python数据分析之路(一)查询和统计

    0. 如何入门数据分析 关注沙漠之鹰的同学一定看过沙漠君写得很多篇数据分析文章,比如分析房价,车价,预测机动车摇号这些话题.其实文章中所有的分析都使用了Python和它非常强大的数据分析库Pandas ...

  4. Spring Security4实例(Java config版)——ajax登录,自定义验证

    本文源码请看这里 相关文章: Spring Security4实例(Java config 版) -- Remember-Me 首先添加起步依赖(如果不是springboot项目,自行切换为Sprin ...

  5. html5 audio play()方法部分ios机不能播放声音

    前几天遇到了一个很奇葩的问题:执行audio.play方法,浏览器.安卓.部分ios可正常播放,部分ios不能播放部分声音,这就奇怪了. 我的第一反应是: 音频文件有问题  -- 写了一个domo验证 ...

  6. atlwin中不停发WM_PAINT消息原因分析

    这里我们基于atlwin定义的窗口类SampleWindow继承自CWindowImpl(定义见atlwin.h),并注册了WM_PAINT消息处理函数OnPaint,注意,我们在OnPaint函数中 ...

  7. 列表操作之定义,切片(取元素)(Python)

    学完列表,元组,字典,集合以后,发现他们长的有些像,傻傻分不清,现在回顾下,以代码为例进行分析每一种操作的属性.(英语不佳,错误请忽略) 举栗如下:names = ["hbb",' ...

  8. js模块加载详解

    看着java中各种import加载,在回过头来看看javascript还在自己造轮子,写各种XX的模块加载框架,ECMASCRIPT6不知什么时候能够普及.不过DT归DT,该学的还是要学. 一 同步加 ...

  9. [bzoj 2243]: [SDOI2011]染色 [树链剖分][线段树]

    Description 给定一棵有n个节点的无根树和m个操作,操作有2类: 1.将节点a到节点b路径上所有点都染成颜色c: 2.询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段),如“ ...

  10. 从零开始搭建Jenkins+Docker自动化集成环境

    本文只简单标记下大概的步骤,具体搭建各个部分的细节,还请自行搜索.第一.二部分只是对Jenkins和Docker的简单介绍,熟悉的同学请直接跳到第三部分. 一.关于Jenkins Jenkins简介 ...