首頁 > 軟體

SpringBoot整合Thymeleaf與FreeMarker檢視層技術

2022-08-13 18:01:23

整合Thymeleaf

Thymeleaf是新一代Java模板引擎,類似於Velocity、FreeMarker等傳統Java模板引擎。與傳統Java模板引擎不同的是,Thymeleaf支援HTML原型,既可以讓前端工程師在瀏覽器中直接開啟檢視樣式,也可以讓後端工程師結合真實資料檢視顯示效果。同事,Spring Boot提供了Thymeleaf自動化設定解決方案,因此在Spring Boot中使用Thymeleaf 非常方便。Spring Boot整合Thymeleaf 主要可通過如下步驟

1. 建立工程新增依賴

新建一個Spring Boot工程,然後新增spring-boot-starter-web 和spring-boot-starter-thymeleaf 依賴

<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>

2. 設定Thymeleaf

Spring Boot為Thymeleaf提供了自動化設定類ThymeleafAutoConfiguration,相關的設定屬性在ThymeleafProperties 類中,ThymeleafProperties類部分原始碼如下:

@ConfigurationProperties(prefix = "spring.thymeleaf")
public class ThymeleafProperties {
	private static final Charset DEFAULT_ENCODING = StandardCharsets.UTF_8;
	public static final String DEFAULT_PREFIX = "classpath:/templates/";
	public static final String DEFAULT_SUFFIX = ".html";
}

由此設定可以看到,預設的模板位置在classpath:/templates/,預設的模板字尾名為.html。如果使用IDEA建立Spring Boot 專案,templates資料夾預設會建立。如需對預設的Thymeleaf 設定引數進行自定義設定,可以在application.properties 中進行設定,部分常見設定如下:

#是否開啟快取,開發時可設定為false,預設為true
spring.thymeleaf.cache=false
#檢查模版是否存在,預設為true
spring.thymeleaf.check-template=true
#檢查模版位置是否存在,預設為true
spring.thymeleaf.check-template-location=true
#模版檔案編碼
spring.thymeleaf.encoding=UTF-8
#模版檔案位置
spring.thymeleaf.prefix=classpath:/templates/
#Content-Type設定
spring.thymeleaf.servlet.content-type=text/html
#模版檔案字尾
spring.thymeleaf.suffix=.html

3. 設定控制器

建立Book實體類,然後在Controller中返回ModelAndView,如下:

public class Book {
    private int id;
    private String name;
    private String author;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAuthor() {
        return author;
    }
    public void setAuthor(String author) {
        this.author = author;
    }
}
@RestController
public class BookController {
    @GetMapping(value = "/books")
    public ModelAndView books(){
        List<Book> books = new ArrayList<>();
        Book b1 = new Book();
        b1.setId(1);
        b1.setAuthor("唐家三少");
        b1.setName("斗羅大陸Ⅰ");
        Book b2 = new Book();
        b2.setId(2);
        b2.setAuthor("唐家三少");
        b2.setName("斗羅大陸Ⅱ");
        books.add(b1);
        books.add(b2);
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("books",books);
        modelAndView.setViewName("books");
        return modelAndView;
    }
}

4. 建立檢視

在resources目錄下的templates目錄中建立books.html,如下:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>圖書列表</title>
</head>
<body>
<table border="1">
    <tr>
        <td>圖書編號</td>
        <td>圖書名稱</td>
        <td>圖書作者</td>
    </tr>
    <tr th:each="book:${books}">
        <td th:text="${book.id}"></td>
        <td th:text="${book.name}"></td>
        <td th:text="${book.author}"></td>
    </tr>
</table>
</body>
</html>

程式碼解釋:

  • 首先在第二行匯入Thymeleaf 的名稱空間
  • 通過遍歷將books中的資料展示出來,Thymeleaf中通過th:each進行集合遍歷,通過th:text展示資料

5. 執行

瀏覽器輸入"http://localhost:8081/books",檢視執行結果,如圖:

整合FreeMarker

FreeMarker 是一個非常古老的模板引擎,可以用在Web環境或者非Web環境中。FreeMarker 需要經過解析才能在瀏覽器中展示出來。FreeMarker 不僅可以用來設定HTML頁面模板,也可以作為電子郵件模板、組態檔模板以及原始碼模板。整合步驟如下:

1. 建立專案新增依賴

建立Spring Boot專案,然後新增spring-boot-starter-web和spring-boot-starter-freemarker依賴,如下:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--    整合FreeMarker    -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>

2. 設定FreeMarker

Spring Boot對FreeMarker 也提供了自動化設定類FreeMarkerAutoConfiguration,相關的設定屬性在FreeMarkerProperties中,FreeMarkerProperties的部分原始碼如下:

@ConfigurationProperties(prefix = "spring.freemarker")
public class FreeMarkerProperties extends AbstractTemplateViewResolverProperties {
	public static final String DEFAULT_TEMPLATE_LOADER_PATH = "classpath:/templates/";
	public static final String DEFAULT_PREFIX = "";
	public static final String DEFAULT_SUFFIX = ".ftl";
    ...
}

FreeMarker 預設模板位置和Thymeleaf 一樣,都在classpath:/templates/中,預設檔案字尾是.ftl,開發者可以在application.properties 中對這些預設設定進行修改,如下:

3. 控制器

控制器和Thymeleaf 中的控制器一樣,這裡不再重複

4. 建立檢視

在resources目錄下的templates目錄中建立books.ftl 檔案,如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>圖書列表FreeMarker</title>
</head>
<body>
<table border="1">
    <tr>
        <td>圖書編號</td>
        <td>圖書名稱</td>
        <td>圖書作者</td>
    </tr>
    <#if books ?? && (books?size>0)>
    <#list books as book>
        <tr>
            <td>${book.id}</td>
            <td>${book.name}</td>
            <td>${book.author}</td>
        </tr>
    </#list>
    </#if>
</table>
</body>
</html>

程式碼解釋:

先判斷model中的books部位可控並且books中有資料,然後再進行遍歷

5. 執行

瀏覽器輸入"http://localhost:8081/books",檢視執行結果,如圖:

到此這篇關於SpringBoot整合Thymeleaf與FreeMarker檢視層技術的文章就介紹到這了,更多相關SpringBoot整合檢視層內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com