Teymeleaf的使用

案例一:springboot搭建Thymeleaf
1、导入依赖
2、新建html页面模板
3、新建前端控制层Controller
4、新建启动类

1、导入依赖

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.chawaner</groupId>
<artifactId>springboot-thymeleaf</artifactId>
<version>1.0-SNAPSHOT</version>
<description>Thymeleaf案例操作</description> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
</parent> <dependencies>
<!--web起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--thymeleaf配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
</project>

2、新建模板:demo1.html

<!DOCTYPE html>
<!--引入Thymeleaf标签-->
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Thymeleaf模板引擎</title>
</head>
<body>
<!--
需要在指定的Thymeleaf的标签内,使用Thymeleaf语法
th:text="" 输出文本内容
-->
<div th:text="${message}"></div>
</body>
</html>

3、新建前端控制器:TestController

/**
* @Author TeaBowl
* @Date 2020/12/15 17:03
* @Version 1.0
* Thymeleaf模板引擎
*/
@Controller
@RequestMapping(value = "/test")
public class TestController { @GetMapping(value = "/hello")
public String hello(Model model){
model.addAttribute("message","hello Thymeleaf!");
return "demo1";
}
}

4、新建启动类:ThymeleafApplication

/**
* @Author TeaBowl
* @Date 2020/12/15 17:22
* @Version 1.0
*/
@SpringBootApplication
public class ThymeleafApplication { public static void main(String[] args) {
SpringApplication.run(ThymeleafApplication.class,args);
} }

5、测试

a.运行启动类ThymeleafApplication
b.打开浏览器:localhost:8080/test/hello
浏览器页面显示:hello Thymeleaf!
c.测试运行成功!

6、如何证明模板已经生效?

在浏览器显示页面上右键查看源码,

标签内部显示的是数据,而非模板语法

<!DOCTYPE html>
<!--引入Thymeleaf标签-->
<html>
<head>
<meta charset="UTF-8">
<title>Thymeleaf模板引擎</title>
</head>
<body>
<!--
需要在指定的Thymeleaf的标签内,使用Thymeleaf语法
th:text="" 输出文本内容
-->
<div>hello Thymeleaf!</div>
</body>
</html>

7、关闭缓存

创建application.yml

spring:
thymeleaf:
cache: false #模板缓存

8、thymeleaf基本语法

  1. 输出文本内容
<div th:text="${message}"></div>
  1. th:action 指定表单提交的路径
<div>
<form id="login-form" th:action="@{/test/hello}">
<button>提交</button>
</form>
</div>
  1. th:each循环标签

首先,创建一个User类

/**
* @Author TeaBowl
* @Date 2020/12/16 15:55
* @Version 1.0
*/
@Data //省略setter&getter
@NoArgsConstructor //无参构造
@AllArgsConstructor //全参构造
public class User {
private Integer id;
private String name;
private String address;
}

然后,在前端控制器TestController中创建List集合,添加数据并存入到Model;

/**
* @Author TeaBowl
* @Date 2020/12/15 17:03
* @Version 1.0
* Thymeleaf模板引擎
*/
@Controller
@RequestMapping(value = "/test")
public class TestController { @GetMapping(value = "/hello")
public String hello(Model model){
model.addAttribute("message","hello Thymeleaf!"); //创建一个List<User>,并将List<User>存入到Model中,到页面使用Thymeleaf标签显示
List<User> users = new ArrayList<>();
users.add(new User(1,"张三","深圳"));
users.add(new User(2,"李四","北京"));
users.add(new User(3,"王五","武汉"));
model.addAttribute("users",users); return "demo1";
}
}

最后,从前端页面取数据

<div>
th:each循环标签
<table>
<tr>
<td>编号</td>
<td>ID</td>
<td>NAME</td>
<td>ADDRESS</td>
</tr>
<!--
循环
user,userSta:${users}
user接收users对象
userSta当前循环对象的状态
-->
<tr th:each="user,userSta:${users}">
<td th:text="${userSta.count}"></td>
<td th:text="${user.id}"></td>
<td th:text="${user.name}"></td>
<td th:text="${user.address}"></td>
</tr>
</table>
</div>

9、Map输出

首先,在TestController中定义一个Map对象

/**
* @Author TeaBowl
* @Date 2020/12/15 17:03
* @Version 1.0
* Thymeleaf模板引擎
*/
@Controller
@RequestMapping(value = "/test")
public class TestController { @GetMapping(value = "/hello")
public String hello(Model model){
model.addAttribute("message","hello Thymeleaf!"); //创建一个List<User>,并将List<User>存入到Model中,到页面使用Thymeleaf标签显示
List<User> users = new ArrayList<>();
users.add(new User(1,"张三","深圳"));
users.add(new User(2,"李四","北京"));
users.add(new User(3,"王五","武汉"));
model.addAttribute("users",users); //Map定义,存入Model
Map<String,Object> dataMap = new HashMap<String,Object>();
dataMap.put("No","123");
dataMap.put("address","深圳");
model.addAttribute("dataMap",dataMap); return "demo1";
}
}

然后,从前端页面取数据

<div>
读取Map的两种方式<br>
1、知道Map的Key,直接根据Key获取数据<br>
3、不知道Map的Key,使用循环的方式获取Key,然后获取数<br>
<h3>方式一</h3>
<div>
获取Key=No的值:<span th:text="${dataMap.No}"></span><br>
获取Key=Address的值:<span th:text="${dataMap.Address}"></span>
</div>
<h3>方式二</h3>
<div th:each="m:${dataMap}">
<span th:text="${m.key}"></span>:<span th:text="${m.value}"></span>
</div>
</div>

10、Data日期输出

首先,在后台创建日期

/**
* @Author TeaBowl
* @Date 2020/12/15 17:03
* @Version 1.0
* Thymeleaf模板引擎
*/
@Controller
@RequestMapping(value = "/test")
public class TestController { @GetMapping(value = "/hello")
public String hello(Model model){
model.addAttribute("message","hello Thymeleaf!"); //创建一个List<User>,并将List<User>存入到Model中,到页面使用Thymeleaf标签显示
List<User> users = new ArrayList<>();
users.add(new User(1,"张三","深圳"));
users.add(new User(2,"李四","北京"));
users.add(new User(3,"王五","武汉"));
model.addAttribute("users",users); //Map定义,存入Model
Map<String,Object> dataMap = new HashMap<String,Object>();
dataMap.put("No","123");
dataMap.put("Address","深圳");
model.addAttribute("dataMap",dataMap); //创建日期,存入Model
model.addAttribute("Now",new Date()); return "demo1";
}
}

然后,从前端页面取数据

<div>
Data数据获取
format参数:对象,输出格式
<div>
<span th:text="${#dates.format(now,'yyyy-MM-dd HH:mm:ss')}"></span>
</div>
</div>

11、if条件

首先,在后台写数据,存入Model

//if条件,存入Model
model.addAttribute("age",22);

然后,在前端页面写条件判断

<div>
if条件判断,unless表示条件不成立时
<div>
<span th:if="${age>=18}">成年人</span>
<span th:unless="${age<18}">成年人</span>
</div>
</div>

12、th:fragment 定义一个模块

新建一个模块:footer.html

<!DOCTYPE html>
<html lang="en">
<!--引入Thymeleaf标签-->
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>当作一个模块</title>
</head>
<body>
<!--定义一个模块,命名为copy-->
<div id="C" th:fragment="copy">
关于我们<br>
</div>
</body>
</html>

然后,把定义好的模块引入到前端页面

<div>
引入模块footer<br>
th:include="footer::copy"引入footer页面里的copy
<div>
<div id="A" th:include="footer::copy"></div>
</div>
</div>

Thymeleaf页面静态化技术的更多相关文章

  1. php页面静态化技术;学习笔记

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. 页面静态化技术Freemarker技术的介绍及使用实例.

    一.FreeMarker简介 1.动态网页和静态网页差异 在进入主题之前我先介绍一下什么是动态网页,动态网页是指跟静态网页相对应的一种网页编程技术.静态网页,随着HTML代码的生成,页面的内容和显示效 ...

  3. java秒杀系列(2)- 页面静态化技术

    前言 通过代码片段分别介绍服务端渲染.客户端渲染.对象缓存三种方式的写法. 代码片段仅供参考,具体实现需要根据业务场景自行适配,但思想都是一样. 一.服务端渲染方式 1.接口返回html页面的设置 @ ...

  4. 高性能Java Web 页面静态化技术(原创)

    package com.yancms.util; import java.io.*; import org.apache.commons.httpclient.*; import org.apache ...

  5. 高性能Java Web 页面静态化技术

    package com.yancms.util; import java.io.*; import org.apache.commons.httpclient.*; import org.apache ...

  6. Freemarker页面静态化技术,activemq监听页面变动

    初步理解: 架构优化: 静态页面的访问速度优于从缓存获取数据的动态页面的访问速度: Freemarker: 导包 模板:hello.ftl <!DOCTYPE html> <html ...

  7. Freemarker 页面静态化技术使用入门案例

    在访问 新闻.活动.商品 详情页面时, 路径可以是 xx[id].html, 服务器端根据请求 id, 动态生成 html 网页,下次访问数据时,无需再查询数据,直接将 html 静态页面返回.这样一 ...

  8. Django框架开发web网站的网页优化—页面静态化

    网站优化-页面静态化 1)概念 提前将页面所用到的数据从数据库查询出来,然后生成一个静态页面,之后用户来访问的时候,直接返回静态页面. 举例:首页静态化:获取首页用到的数据表中的数据,生成静态首页in ...

  9. 大型网站提速关键技术(页面静态化,memcached,MySql优化)(三)

    页面静态化的技术实现有两种方式 使用PHP自己的缓存机制 先说明一下OB缓存的机制. ob1.php 代码:说明的ob的各个用法->项目中 ☞ 如何打开ob缓存 ①     配置php.ini ...

随机推荐

  1. HTTP:Java实现HTTP请求的三种方式

    目前JAVA实现HTTP请求的方法用的最多的有两种: 一种是通过HTTPClient这种第三方的开源框架去实现.HTTPClient对HTTP的封装性比较不错,通过它基本上能够满足我们大部分的需求,H ...

  2. Mysql 中字符串的截取

    一.从左开始截取字符串 用法:left(str, length),即:left(被截取字符串, 截取长度) mysql> SELECT LEFT('hello,world',3); +----- ...

  3. linux学习之路第二天(xshell和xftp的使用图解)

    以上xshell的连接过程 2.远程上传和下载文件xftp6 一定要换成22和sftp,否则连接不上 如果出现中文乱码的情况 先点击那个小齿轮 再点击选项 把编码编程UTF-8就ok了

  4. Java并发实战一:线程与线程安全

    从零开始创建一家公司 Java并发编程是Java的基础之一,为了能在实践中学习并发编程,我们跟着创建一家公司的旅途,一起来学习Java并发编程. 进程与线程 由于我们的目标是学习并发编程,所以我不会把 ...

  5. 理解Python中的闭包

    1.定义 闭包是函数式编程的一个重要的语法结构,函数式编程是一种编程范式 (而面向过程编程和面向对象编程也都是编程范式).在面向过程编程中,我们见到过函数(function):在面向对象编程中,我们见 ...

  6. .NET Core 中的 Swagger 应用与微服务场景下的Swagger Api 集成显示

    Swagger 与 OpenAPI 的历史来源: Swagger 项目于 2015 年捐赠给 OpenAPI Initiative,此后被称为 OpenAPI.这两个名称可以互换使用.但是," ...

  7. MapReduce学习总结之java版wordcount实现

    一.代码实现: package rdb.com.hadoop01.mapreduce; import java.io.IOException; import org.apache.hadoop.con ...

  8. vuejs第一集之:vuejs了解

    1,了解到前后端分离2,连接到vuejs3,搜集书籍: Vuejs前端开发基础与项目实战 (https://detail.tmall.com/item.htm?spm=a230r.1.14.107.6 ...

  9. 前端开发入门到进阶第三集【Jsonp】

    /* $.ajax({ type : "get", url : "${loginInfo.SSO_BASE_URL }/user/token/" + token ...

  10. python调用接口方式

    python中调用API的几种方式: - urllib2- requests 一.调用别人的接口 案例1.urllib2 import urllib2, urllib github_url ='htt ...