一、什麼是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的配置,其中我已經給了註釋,這些常用的配置大家可以學習一下,若有不足之處,歡迎大家在評論中指出,希望大家能一起進步。