文章目录
上一次我们讲了Thymeleaf静态模板引擎,今天我们来讲另一款Java静态模板引擎技术FreeMarker。
什么是FreeMarker?
FreeMarker是一款模板引擎:即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
FreeMarker是免费的,基于Apache许可证2.0版本发布。其模板编写为FreeMarker Template Language(FTL),属于简单、专用的语言。需要准备数据在真实编程语言中来显示,比如数据库查询和业务运算,之后模板显示已经准备好的数据。在模板中,主要用于如何展现数据,而在模板之外注意于要展示什么数据。
项目结构
搭建项目环境
我们创建一个Maven项目,并在pom.xml文件中引入相关依赖。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.6.RELEASE</version>
</parent>
<dependencies>
<!--SpringMVC的启动器依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--SpringBoot整合FreeMarker模板引擎的依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<!--Lombox依赖-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
SpringBoot项目启动类
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class);
}
}
application.yml配置文件
spring:
freemarker:
charset: UTF-8
# 如果不配置模板文件后缀,默认是.ftl文件
# suffix: ".html"
# 默认就是在templates目录下,是一个数组对象,可以配置多个
# template-loader-path: "classpath:/templates/"
User类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private String username;
private String password;
}
UseController类
@Controller
public class UserController {
@RequestMapping("/user")
public String findUser(Model model) {
List<User> users = new ArrayList<>();
users.add(new User("张三","123"));
users.add(new User("李四","123"));
model.addAttribute("users", users);
model.addAttribute("hello","hello world");
model.addAttribute("now",new Date());
model.addAttribute("num",100);
return "index";
}
}
index.ftl
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>FreeMarker入门</title>
</head>
<body>
<h1>${hello}</h1>
<h1>${now?date}</h1>
<table>
<tr>
<td>姓名</td>
<td>密码</td>
</tr>
<#list users as user>
<tr>
<td>${user.username}</td>
<td>${user.password}</td>
</tr>
</#list>
</table>
<#if num == 100>
num的值是100
<#else>
num的值不是100
</#if>
</body>
</html>
测试效果
启动项目,我们访问http://localhost:8080/user路径,得到结果: