Spring boot 瞭解(三)(整合thymeleaf和thymeleaf顯示)
學習到整合thymeleaf及其顯示資料的部分,記錄如下:
(學習網址:https://www.majiaxueyuan.com/front/couinfo/36)
SpringBoot 不推薦使用jsp
因為jsp會編譯成Servlet 屬於重量級
Springboot中推薦使用
Thymeleaf
Freemaker Groovy
Thymeleaf瞭解目錄
整合Thymeleaf
1.新增依賴
org.springframework.boot
spring-boot-starter-thymeleaf
完整如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
2.在application.properties新增
spring.thymeleaf.prefix=classpath:/templates/ #字首 spring.thymeleaf.suffix=.html #字尾 一定要把" . "加上 否則識別不了 這個巨坑 spring.thymeleaf.mode=HTML5 #模式為HTML5 spring.thymeleaf.encoding=UTF-8 #編碼為UTF-8 spring.thymeleaf.content.type=text/html #型別設定為text/html
(在這有個坑 最開始新增以上我建立html檔案不能識別,會報錯:template might not exist or might not be accessible by any of the configured Template Resolvers] with root cause,如果不加以上就可以使用,原因是字尾沒有加上 " . " 所以SpiringBoot掃描不到以html結尾的 。。所以.html結尾的 )
3.在templates中編寫一個html檔案
編輯一下html中的內容
4.在Controller類中去返回這個頁面
比如我在PageController中去返回
裡面的方法如下:
@Controller
public class PageController {
................
@RequestMapping("/hel") //瀏覽器上訪問hel
public String helloHtml(){ //呼叫這個方法hellohtml
return "hello"; //返回一個頁面以hello命名的html檔案(hello.html 路徑在templs下)
}
}
5.啟動程式
訪問localhost:8080/hel
可以看到返回的hello頁面
使用Thymeleaf顯示資料
可以在Controller中返回一些資料到前臺頁面上
我在視訊中看到了使用了一個叫model的物件,裡面可以存放很多東西。
然後使用addAttribute 方法到前臺呼叫
舉個栗子:我在當前hello頁面新增一些資料顯示輸出
我在Controoller的方法中添加了一些東西:
字串型別的名字、數值型別的年齡、list型別的外號,然後將其刷到前臺去
如下:
@RequestMapping("/hel")
public String helloHtml(Model model) {
String sname = "二狗子";
model.addAttribute("sname", sname);
Integer gender = 23;
model.addAttribute("age", gender);
List<String> lists = new ArrayList<String>();
lists.add("帥比");
lists.add("大帥比");
lists.add("炒雞大帥比");
lists.add("炒雞宇宙大帥比");
model.addAttribute("lists", lists);
return "hello";
}
model.addAttribute()方法是有點像key-value的樣子刷入。
是一個介面,原始碼如下:
public interface Model {
Model addAttribute(String var1, @Nullable Object var2);
Model addAttribute(Object var1);
Model addAllAttributes(Collection<?> var1);
Model addAllAttributes(Map<String, ?> var1);
Model mergeAttributes(Map<String, ?> var1);
boolean containsAttribute(String var1);
Map<String, Object> asMap();
}
我們把 sname,age,list通過方法刷到前臺後,需要在頁面端去讀取。
html頁面我也改了下:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title> 哈嘍 二狗!</title>
</head>
<a>
<h1 style="color: blueviolet"> 哈嘍 二狗!!!</h1>
<h1 style="color: black" th:text="${sname}"/>
<h1 th:text="${age}"/>
<table>
<tr>外號</tr>
<tr th:each="list:${lists}">
<td th:text="${list}">
</tr>
</table>
<img th:src="@{/img/dog.jpg}"/>
<input th:value="此時一個濃眉大眼的網友路過"/>
<img th:src="@{/img/cat.jpg}">
</body>
</html>
注意:
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
這個是設定 標頭檔案,不進行設定是不認識 th標籤的
(可以看看這個大佬寫的:https://www.cnblogs.com/vinphy/p/4674247.html)
然後啟動就可以看到效果了
以上。