三、SpringBoot整合Thymeleaf

三、SpringBoot整合Thymeleaf

As well as REST web services, you can also use Spring MVC to serve dynamic HTML content. Spring MVC supports a variety of templating technologies, including Thymeleaf, FreeMarker, and JSPs. Also, many other templating engines include their own Spring MVC integrations.

Spring Boot includes auto-configuration support for the following templating engines:

* FreeMarker

* Groovy

* Thymeleaf

* Mustache

If possible, JSPs should be avoided. There are several known limitations when using them with embedded servlet containers

When you use one of these templating engines with the default configuration, your templates are picked up automatically from src/main/resources/templates.

由上述内容可知,我们可以通过SpringMVC来提供动态内容,SpringMVC支持各种模板引擎,比如Thymeleaf,FreeMarker以及JSP等等,SpringBoot对这些模板引擎也有很好的集成

但是,如果可能,我们应该尽量避免在SpringBoot应用程序中使用Jsp,因为它们和一些嵌入式Servlet容器一起使用时,会出现问题...

1.简单整合

①,在pom.xml中添加Thymeleaf集成

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 4     <modelVersion>4.0.0</modelVersion>
 5     <parent>
 6         <groupId>org.springframework.boot</groupId>
 7         <artifactId>spring-boot-starter-parent</artifactId>
 8         <version>2.1.4.RELEASE</version>
 9         <relativePath/> <!-- lookup parent from repository -->
10     </parent>
11     <groupId>com.hnnz</groupId>
12     <artifactId>demo</artifactId>
13     <version>0.0.1-SNAPSHOT</version>
14     <name>SpringBootDemo</name>
15     <description>Demo project for Spring Boot</description>
16
17
18     <properties>
19         <java.version>1.8</java.version>
20     </properties>
21
22
23     <dependencies>
24         <dependency>
25             <groupId>org.springframework.boot</groupId>
26             <artifactId>spring-boot-starter-web</artifactId>
27         </dependency>
28
29
30         <dependency>
31             <groupId>org.springframework.boot</groupId>
32             <artifactId>spring-boot-starter-test</artifactId>
33             <scope>test</scope>
34         </dependency>
35
36
37         <dependency>
38             <groupId>org.springframework.boot</groupId>
39             <artifactId>spring-boot-starter-thymeleaf</artifactId>
40         </dependency>
41
42
43         <!-- Compile -->
44         <dependency>
45             <groupId>javax.servlet</groupId>
46             <artifactId>jstl</artifactId>
47         </dependency>
48         <!-- Provided -->
49         <dependency>
50             <groupId>org.springframework.boot</groupId>
51             <artifactId>spring-boot-starter-tomcat</artifactId>
52             <scope>provided</scope>
53         </dependency>
54         <dependency>
55             <groupId>org.apache.tomcat.embed</groupId>
56             <artifactId>tomcat-embed-jasper</artifactId>
57             <scope>provided</scope>
58         </dependency>
59
60
61     </dependencies>
62
63
64     <build>
65         <plugins>
66             <plugin>
67                 <groupId>org.springframework.boot</groupId>
68                 <artifactId>spring-boot-maven-plugin</artifactId>
69             </plugin>
70         </plugins>
71     </build>
72
73
74 </project>

如上:

  • 红色标注部分是SpringBoot集成Thymeleaf
  • 蓝色划去部分是我们上一章整合JSP的内容,这里可以忽略或者删除

②,修改application.properties(删去application.properties中原有的配置JSP的内容)

1 spring.mvc.view.prefix: /resources/templates/
2 spring.mvc.view.suffix: .html

其实还是修改前缀后缀,但是这里我们完全可以不写,因为本章最开始的英文文档已经说过:Spring会默认的去/resources/templates/ 下寻找HTML模板

③,在/resources/templates/下新建index.html,内容如下

 1 <!DOCTYPE html>
 2 <html lang="en" xmlns:th="http://www.thymeleaf.org">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6 </head>
 7 <body>
 8    Hello,Thymeleaf!
 9 </body>
10 </html>

绿色部分表示 声明当前文件是 thymeleaf, 里面可以用th开头的属性

HelloController内容不变,不过,现在我们访问/index,返回的视图将会是一个html页面

HelloController.java:

 1 package com.hnnz.demo.controller;
 2
 3
 4 import org.springframework.stereotype.Controller;
 5 import org.springframework.web.bind.annotation.RequestMapping;
 6 import org.springframework.web.bind.annotation.ResponseBody;
 7 import org.springframework.web.bind.annotation.RestController;
 8
 9
10 @Controller
11 public class HelloController {
12
13
14     @RequestMapping("/hello")
15     @ResponseBody
16     public String hello(){
17         return "Hello,Spring Boot!";
18     }
19
20
21     @RequestMapping("/index")
22     public String index() {
23         return "index";
24     }
25
26
27 }

④,访问 http://localhost:8080/index 浏览器返回的视图如下

2.参数传递

Thymeleaf的参数传递依靠ognl表达式完成(类似于EL表达式),其用法如下

①,修改HelloController

 1 package com.hnnz.demo.controller;
 2
 3
 4 import org.springframework.stereotype.Controller;
 5 import org.springframework.ui.ModelMap;
 6 import org.springframework.web.bind.annotation.RequestMapping;
 7 import org.springframework.web.bind.annotation.ResponseBody;
 8 import org.springframework.web.bind.annotation.RestController;
 9
10
11 @Controller
12 public class HelloController {
13
14
15     private String hello = "Hello,Thymeleaf!";
16
17
18     @RequestMapping("/hello")
19     @ResponseBody
20     public String hello(){
21         return "Hello,Spring Boot!";
22     }
23
24
25     @RequestMapping("/index")
26     public String index(ModelMap modelMap) {
27         modelMap.addAttribute("hello",hello);
28         return "index";
29     }
30
31
32 }
  • 我们要做的就是将这个类里面的私有属性hello传递到html文件中
  • ModelMap实质上就是一个Map集合,我们可以通过addAttribute(String,Object)方法添加值

②,修改index.html

 1 <!DOCTYPE html>
 2 <html lang="en" xmlns:th="http://www.thymeleaf.org">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6 </head>
 7 <body>
 8 <p th:text="${hello}"></p>
 9 </body>
10 </html>

红色标注部分,就表示将hello取出来放进<p>标签里

③,访问 http://localhost:8080/index 浏览器返回的视图如下

3.模板其它用法

Thymeleaf也有其他用法,比如判断,遍历等等,这里给出一个表格,不再赘述,你也可以参阅官方文档了解它的用法,地址:    https://www.thymeleaf.org/documentation.html


关键字

功能介绍

案例

th:id

替换id

<input th:id="‘xxx‘ + ${collect.id}"/>

th:text

文本替换

<p th:text="${collect.description}">description</p>

th:utext

支持html的文本替换

<p th:utext="${htmlcontent}">conten</p>

th:object

替换对象

<div th:object="${session.user}">

th:value

属性赋值

<input th:value="${user.name}" />

th:with

变量赋值运算

<div th:with="isEven=${prodStat.count}%2==0"></div>

th:style

设置样式

th:

th:onclick

点击事件

th:onclick="‘getCollect()‘"

th:each

遍历

tr th:each="user,userStat:${users}">

th:if

判断条件

<a th:if="${userId == collect.userId}" >

th:unless

和th:if判断相反

<a th:href="@{/login}" th:unless=${session.user != null}>Login</a>

th:href

链接地址

<a th:href="@{/login}" th:unless=${session.user != null}>Login</a> />

th:switch

多路选择 配合th:case 使用

<div th:switch="${user.role}">

th:case

th:switch的一个分支

<p th:case="‘admin‘">User is an administrator</p>

th:fragment

布局标签,定义一个代码片段,方便其它地方引用

<div th:fragment="alert">

th:include

布局标签,替换内容到引入的文件

<head th:include="layout :: htmlhead" th:with="title=‘xx‘"></head> />

th:replace

布局标签,替换整个标签到引入的文件

<div th:replace="fragments/header :: title"></div>

th:selected

selected选择框 选中

th:selected="(${xxx.id} == ${configObj.dd})"

th:src

图片类地址引入

<img class="img-responsive" alt="App Logo" th:src="@{/img/logo.png}" />

th:inline

定义js脚本可以使用变量

<script type="text/javascript" th:inline="javascript">

th:action

表单提交的地址

<form action="subscribe.html" th:action="@{/subscribe}">

th:remove

删除某个属性

<tr th:remove="all"> 1.all:删除包含标签和所有的孩子。2.body:不包含标记删除,但删除其所有的孩子。3.tag:包含标记的删除,但不删除它的孩子。4.all-but-first:删除所有包含标签的孩子,除了第一个。5.none:什么也不做。这个值是有用的动态评估。

th:attr

设置标签属性,多个属性可以用逗号分隔

比如th:attr="[email protected]{/image/aa.jpg},title=#{logo}",此标签不太优雅,一般用的比较少。

原文地址:https://www.cnblogs.com/jiabaoo/p/10759756.html

时间: 2024-11-02 18:07:21

三、SpringBoot整合Thymeleaf的相关文章

Spring Boot入门系列六( SpringBoot 整合thymeleaf)

SpringBoot 整合thymeleaf 一.什么是Thymeleaf模板 Thymeleaf是一款用于渲染XML/XHTML/HTML5内容的模板引擎.类似JSP,Velocity,FreeMaker等,它也可以轻易的与Spring MVC等Web框架进行集成作为Web应用的模板引擎.与其它模板引擎相比,Thymeleaf最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个Web应用.它的功能特性如下: @Controller中的方法可以直接返回模板名称,接下来Thyme

SpringBoot整合Thymeleaf(三)

? Thymeleaf是SpringBoot官方推荐的用来渲染页面的一个模板,如果你对模板和模板引擎没什么概念的话,可以简单理解为Thymeleaf是一个高级简洁的JSP.如果学过MVC设计模式,那么Thymeleaf就是视图层(view)的主要核心内容. 为什么要整合Thymeleaf SpringBoot在内置Tomcat服务器,并且以Jar包方式运行,传统JSP页面不在适合这种模式开发 使用Thymeleaf有助于前后端协作,因为它在无网络环境下也可以运行,前端开发者便于在静态页面查看页面

springboot整合Thymeleaf模板引擎

引入依赖 需要引入Spring Boot的Thymeleaf启动器依赖. <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>nekohtml</groupId&g

SpringBoot:2.SpringBoot整合Thymeleaf模板引擎渲染web视图

在Web开发过程中,Spring Boot可以通过@RestController来返回json数据,那如何渲染Web页面?Spring Boot提供了多种默认渲染html的模板引擎,主要有以下几种: Thymeleaf FreeMarker Velocity Groovy Mustache Spring Boot 推荐使用这些模板引擎来代替 Jsp,Thymeleaf 只是其中一种,下面我们来简单聊聊Thymeleaf及实践一下如何整合Spring Boot和Thymeleaf. 1.Thyme

SpringBoot学习9:springboot整合thymeleaf

1.创建maven项目,添加项目所需依赖 <!--springboot项目依赖的父项目--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.0.RELEASE</version> </parent> <de

springboot 整合 thymeleaf的问题

org.thymeleaf.exceptions.TemplateInputException org.thymeleaf.exceptions.TemplateInputException: Error resolving template "Hello", template might not exist or might not be accessible by any of the configured Template Resolvers 因为springboot 是2.0版

(三)SpringBoot整合Apollo

一.将Apollo的源码依赖打入到本地仓库  1.解压apollo-master.zip,进入apollo-master\scripts目录 2.点击build.bat文件就能打入依赖(要配置好maven的环境,他会自动的找到你maven的本 地仓库) 二.创建一个SpringBoot项目 1.创建项目springboot-apollo 2.导入依赖信息 <parent> <groupId>org.springframework.boot</groupId> <a

springBoot整合thymeleaf时th:onclick事件

今天按照 <JavaEE开发的颠覆者: Spring Boot实战> 学习spring boot的时候在编写7_2时thymeleaf传参的时候发生500错误,通过查找各方面资料,发现书上的springboot版本(1.3.0)和我用的版本(2.1.7)不一样引起的 以下处理方法: 1.   将springboot版本改成2.0.5 2.   3.x版本的thymeleaf为了防止注入攻击,升级了安全机制 解决 修改前 <button th:onclick="'javascri

dubbo学习(三) springboot整合dubbo mybatis mysql

dubbo-admin查看服务和服务提供方配置 服务消费方配置 和web 整合相对复杂一些,常出现的问题是Controller中 有@Reference配置的属性  没注入进来而调用时报null 异常 原文地址:https://www.cnblogs.com/LDDXFS/p/9941203.html