使用 Thymeleaf 顯示圖像
1. 概述
Thymeleaf 是一種流行的 Java 模板引擎,它與 Spring 框架相容以產生 HTML 視圖。 Web 應用程式的主要功能之一是渲染圖像。
Spring Boot 為 Java 檔案和資源檔案組織的目錄結構使得在 HTML 檔案中定義圖片的路徑變得容易。
在本教程中,我們將設定一個簡單的 Spring Boot 專案並提供resources
資料夾中的圖像。另外,我們還將了解如何在使用 Thymeleaf 時不定義影像路徑。
2. 項目設定
首先,讓我們透過將spring-boot-starter-web
和spring-boot-starter-thymeleaf
加入pom.xml
來引導一個簡單的 Spring Boot 專案:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<version>3.2.1</version>
</dependency>
在後續部分中,我們將了解如何使用 Thymeleaf 在 Spring Boot 應用程式中顯示圖像。
3. 在 Thymeleaf 模板中顯示圖像
要在 Thymeleaf 中顯示圖像,我們需要遵循為 HTML 檔案建立templates
目錄和為圖像等資源建立static
目錄的標準約定。
3.1.設定目錄
預設情況下,Spring Boot 為我們配置了目錄結構。它將 Java 原始檔與靜態資源和模板分開。此外,它還會自動建立一個資源目錄,我們可以在其中新增靜態檔案和範本。
使用 Thymeleaf 引導 Spring Boot 應用程式時,慣例是在resources
目錄中建立templates
和static
目錄。
Thymeleaf HTML 模板檔案應放置在templates
目錄中,而 JS、CSS、圖片等靜態資源應放置在static
目錄中。
首先,我們在static
資料夾中建立一個images
目錄。接下來,我們將一個名為cat.jpg
的圖像檔案加入到images
目錄中:
現在可以從視圖檔案引用cat.jpg
檔案。
3.2.在 Thymeleaf 中引用圖像
首先,我們在模板目錄中建立一個名為index.html
的新文件,並編寫一段簡單的 HTML 程式碼來顯示static
資料夾中的圖片:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Baeldung Pet Store</title>
</head>
<body>
<h6>Pet Store</h6>
<img th:src="@{images/cat.jpg}" alt="cat">
</body>
</html>
值得注意的是,我們在 HTML 程式碼中加入了 Thymeleaf th:src
屬性來指定圖片的相對路徑。
我們定義影像路徑的方式對於成功顯示影像至關重要。 Spring 已預先配置為從resource
資料夾提供靜態資源。因此,我們在引用圖像和其他靜態檔案時可以省略resource
和static
路徑段。
此外,我們可以將圖像新增到靜態資料夾中,而無需為其建立資料夾:
讓我們將cat.jpg
檔案複製到 static 資料夾:
在這種情況下,我們只需要指定圖像名稱及其擴展名:
// ...
<h6>Pet Store</h6>
<img th:src="@{cat.jpg}" alt="">
// ...
但是,建議為靜態文件建立一個子資料夾以保持它們的組織。
最後,讓我們建立一個控制器類別並新增到索引頁的路由:
@Controller
public class DisplayController {
@RequestMapping("/")
public String home(){
return "index";
}
}
在這裡,我們建立一個將“/”路徑對應到index
視圖範本的路由。這允許我們在加載應用程式時顯示圖像:
影像可以正常顯示,因為相對路徑允許Spring在靜態資源資料夾中定位影像文件,而無需指定完整的絕對路徑。
3.3.避免失敗
簡單來說,在圖片路徑中指定resource
或static
資料夾會導致圖片載入失敗:
// ...
<img th:src="@{../static/images/cat.jpg}" alt="" width="100px">
// ...
上面的程式碼指定了static
資料夾的圖像路徑。由於 Spring Boot 已預先配置為檢查靜態資料夾,因此這會導致路徑錯誤,並且無法找到映像。
因此,我們應該避免在鏡像檔案路徑中包含resource
或static
關鍵字。 Spring在解析影像路徑時預設會檢查這些資料夾。
4。結論
在本文中,我們學習如何使用th:src
屬性在 Thymleaf 模板中顯示圖像。此外,我們還了解如何透過避免路徑聲明中的resources
或static
關鍵字來正確指定影像的路徑。
與往常一樣,範例的原始程式碼可在 GitHub 上取得。