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* MustacheIf possible, JSPs should be avoided. There are several known limitations when using them with embedded servlet containersWhen you use one of these templating engines with the default configuration, your templates are picked up automatically from src/main/resources/templates.
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>
1 spring.mvc.view.prefix: /resources/templates/ 2 spring.mvc.view.suffix: .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>
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 }
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 }
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>
關鍵字
|
功能介紹
|
案例
|
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="src=@{/image/aa.jpg},title=#{logo}",此標籤不太優雅,通常用的比較少。
|