一、什么是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的配置,其中我已经给了注释,这些常用的配置大家可以学习一下,若有不足之处,欢迎大家在评论中指出,希望大家能一起进步。