1.Freemarker介绍
1.1 Freemarker简介
FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
模板编写为FreeMarker Template Language (FTL)。它是简单的,专用的语言, 不是 像PHP那样成熟的编程语言。 那就意味着要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,你可以专注于如何展现数据, 而在模板之外可以专注于要展示什么数据。
官网显示的使用图解:
当然,在非HTML场景下的模板使用也可以用如下图进行解释:
官网:
https://freemarker.apache.org/
在线手册:
模板常用语法,可以参考这个中文在线手册,这里不再赘述
http://freemarker.foofun.cn/
1.2 FreeMarker特性
FreeMarker是基于Java的模板引擎,最初专注于使用MVC软件体系结构进行动态网页生成。使用Freemarker的主要优点是将表示层和业务层完全分开。
开发人员可以处理应用程序代码,而设计人员可以处理html页面设计。最终,使用freemarker可以将它们组合在一起以给出最终的输出页面。
1.3 FreeMarker功能
- 强大的模板语言:条件块,迭代,赋值,字符串和算术运算和格式,宏和函数(包括其他模板),默认转义(可选)等。
- 多用途,轻量级:零依赖性,任何输出格式,可以从任何位置加载模板(可插拔),许多配置选项。
- 国际化/本地化意识:区域设置敏感的数字和日期/时间格式,本地化的模板变体。
- XML处理功能:将XML DOM放入数据模型并遍历它们,甚至进行声明式处理。
- 通用的数据模型:Java对象通过可插拔适配器以变量树的形式暴露给模板,该适配器决定了模板如何使用。
总结一下优势就是:FreeMarker可将业务逻辑与表现层分离,有利于分工合作,提高开发效率。同时有利于提高访问速度,提升并发量,对SEO也更加友好。
2. SpringBoot集成Freemarker
整体代码结构如下:
2.1 maven 依赖
在pom文件中引入freemarker,当然在SpringBoot中是通过引入SpringBoot已经提供好的starter。完整的pom依赖引入如下:
org.springframework.boot
spring-boot-starter-freemarker
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
org.projectlombok
lombok
2.2 配置文件
spring:
application:
name: springboot-freemarker
freemarker:
# 禁用模板缓存
cache: false
# 编码格式
charset: UTF-8
# freemarker模板后缀 默认是 .ftlh
suffix: .html
# 是否为此技术启用MVC视图分辨率。
enabled: true
# Content-Type值
content-type: text/html
# #模板加载路径 按需配置 ,默认路径是 classpath:/templates/
template-loader-path: classpath:/templates/
2.3 演示业务代码
我们建一个用户实体
@Data
public class User {
private String username;
private Integer age;
private String email;
private String address;
}
创建Controller类并提供请求方法
@Controller
public class UserController {
@GetMapping("/")
public String getStudents(Model model) {
List list = new ArrayList<>();
User userOne = new User();
userOne.setUsername("小明");
userOne.setAge(12);
userOne.setEmail("xxx@qq.com");
userOne.setAddress("安徽省合肥市");
list.add(userOne);
User userTwo = new User();
userTwo.setUsername("小红");
userTwo.setAge(13);
userTwo.setEmail("xxx@126.com");
userTwo.setAddress("安徽省合肥市");
list.add(userTwo);
model.addAttribute("users", list);
return "users";
}
}
users.html页面代码如下:
用户列表
名称
年龄
邮件
地址
<#list users as user>
${user.username}
${user.age}
${user.email}
${user.address}
#list>
2.4 测试结果
启动项目,我们打开链接http://127.0.0.1:8080/。