SpringBoot整合視圖層技術——freemarker

一、什麼是freemarker

freemarker是一種模板引擎。在早前我們使用Struts或者SpringMVC等框架的時候,使用的都是jsp,jsp的本質其實就是一個Servlet,其中的數據需要在服務端進行渲染,然後再在客戶端顯示,效率比較低下。

思考問題
在學習之前,大家可以試着考慮一下一個比較實際的問題,只有1-2臺服務器,客戶端有200+,如果所有的渲染數據都放在服務端進行的話,服務端將承受多大的壓力?況且現如今計算機性能普遍已經很高了,我們完全可以將這部分壓力分攤給客戶端,而且實際情況中服務器的數量肯定是遠遠少於客戶端的數量

二、爲什麼要使用freemarker

現如今,我們開發的項目基本上是以前後端分離爲主的,其中的好處不言而喻,所以隨之興起的技術也數不勝數,而模板引擎就是其中一種。
模板引擎中數據渲染是在客戶端,在效率方面,相比傳統的jsp會高一些。
Spring官方比較推薦的是thymeleaf,其文件後綴是html。
本篇文章我們主要來看看SpringBoot整合freemarker。

三、開始幹活

第一步】創建一個SpringBoot項目,創建時可以勾選上如下圖所示的依賴:
在這裏插入圖片描述
注:如果你的項目已經存在,可以在pom.xml文件中添加依賴,如下所示:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>

第二步】我們可以創建一個bean和一個controller,bean中主要是定義一個實體,controller主要是進行業務的處理(這裏我簡寫了,直接就用controller了),具體目錄結構和代碼如下所示:

【目錄結構】
在這裏插入圖片描述
【User.java】

package com.mango.freemarker.bean;

public class User {

    private long id;
    private String username;
    private String address;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

【UserController.java】

package com.mango.freemarker.controller;

import com.mango.freemarker.bean.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

import java.util.ArrayList;
import java.util.List;

@Controller
public class UserController {

    @GetMapping("/user")
    public String user(Model model) {
        List<User> users = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            User user = new User();
            user.setId(i);
            user.setUsername("mango>>>" + i);
            user.setAddress("www.mango.com>>>" + i);
            users.add(user);
        }
        model.addAttribute("users",users);
        return "user";
    }
}

第三步】在resource下的templates文件夾下創建freemarker模板(該文件後綴爲“.ftlh”),至於爲什麼在這個文件夾下創建,因爲這是官方給的默認的路徑,這個路徑也可以更改,後面我會講。如果大家不會創建模板可以百度,也可以評論中問我,因爲這個比較簡單,所以我就不多做解釋了。具體的目錄結構和代碼如下:

【目錄結構】
在這裏插入圖片描述
【user.ftlh】

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>$Title$</title>
</head>
<body>
<table border="1">
    <tr>
        <th>編號</th>
        <th>用戶名稱</th>
        <th>用戶地址</th>
    </tr>
    <#list users as u>
        <tr>
            <td>${u.id}</td>
            <td>${u.username}</td>
            <td>${u.address}</td>
        </tr>
    </#list>
</table>
</body>
</html>

注:上面這段代碼,除了下面這段不完全是html中的,其他都是html模板中的。

<#list users as u>
        <tr>
            <td>${u.id}</td>
            <td>${u.username}</td>
            <td>${u.address}</td>
        </tr>
    </#list>

因爲這就是規定的語法格式。下面我們看看運行結果:

運行結果
在這裏插入圖片描述
到此,freemarker演示結束,下面對freemarker配置相關內容進行拓展一下。

# 自定義 FreeMarker 模板位置, 默認的模板位置在 classpath 下面的 templates 目錄中
spring.freemarker.template-loader-path=classpath:/mango1
# 自定義模板的編碼格式, 默認就是UTF-8
spring.freemarker.charset=UTF-8
# 定義模板的 content-type
spring.freemarker.content-type=text/html
# 是否開啓 FreeMarker 緩存
spring.freemarker.cache=false
# 配置模板後綴
spring.freemarker.suffix=.ftlh

注:上面這段代碼是application.properties中關於freemarker的配置,其中我已經給了註釋,這些常用的配置大家可以學習一下,若有不足之處,歡迎大家在評論中指出,希望大家能一起進步。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章