freemarker简介
FreeMarker 是一款 模板引擎技术: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。
它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
模板编写为FreeMarker Template Language (FTL)。它是简单的,专用的语言, 不是 像PHP那样成熟的编程语言。 那就意味着要准备的数据需要在真实的编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,你可以专注于如何展现数据, 而在模板之外可以专注于要展示什么数据。
freemarker是springmvc一种视图格式,默认情况下SpringMVC支持freemarker视图格式。
freemarker的使用
- 导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
- 配置application.yml
spring:
application:
name: freemarker-demo #指定服务名
freemarker:
cache: false #关闭模板缓存,方便测试
settings:
template_update_delay: 0 #检查模板更新延迟时间,设置为0表示立即检查,如果时间大于0会有缓存不方便进行模板测试
suffix: .ftl #指定Freemarker模板文件的后缀名
template-loader-path: classpath:/templates #模板存放位置,指的是类路径:resource目录下需要创建templates这个包,用于保存模板
- 在templates包下,创建模板,以 .ftl 为后缀名
- freemarker生成页面的方式有两种:
- 动态渲染数据:基于模板、controller方法返回到此模板
- 静态页面:基于模板、配置类,使用Freemarker原生Api将文本或者图片按照模板生成静态内容。调用方法返回的是url地址,可通过url地址访问此页面
注意:两种方式,都需要先生成模板
- 利用@Autowired注入Configuration类对象
- 通过configuration对象调用getTemplate方法,传入自定义模板的名称,生成模板对象
- 获取数据
- 通过模板对象调用process方法,传入数据、创建一个输出流并且指定要写入到哪里。这样就可以将数据按照模板样式写入到指定地址,生成html页面
生成静态页面举例
:
public void test() throws IOException, TemplateException {
//生成freemarker的模板对象,调用方法获取模板
Template template = configuration.getTemplate("02-list.ftl");
//获取数据的过程,这里自定义封装成了方法
Map params = getData();
//合成
template.process(params, new FileWriter("D:/list.html")); //第一个参数:数据模型,第二个参数:输出流
}
freemarker语法
基础语法种类
1、注释,即<#-- -->,介于其之间的内容会被freemarker忽略
<#--我是一个freemarker注释-->
2、插值(Interpolation):即 ${..}
部分,freemarker会用真实的值代替**${..}
**
Hello ${name}
3、FTL指令:和HTML标记类似,名字前加#予以区分,Freemarker会解析标签中的表达式或逻辑。
<# >FTL指令</#>
4、文本,仅文本信息,这些不是freemarker的注释、插值、FTL指令的内容会被freemarker忽略解析,直接输出内容。
<#--freemarker中的普通文本-->
我是一个普通的文本
集合指令(List和Map)
if指令
if 指令即判断指令,是常用的FTL指令,freemarker在解析时遇到if会进行判断,条件为真则输出if中间的内容,否则跳过内容不再输出。
运算符
1、算数运算符
FreeMarker表达式中完全支持算术运算,FreeMarker支持的算术运算符包括:
加法:+ 减法:- 乘法:* 除法:/ 求模 (求余):%
除了 + 运算以外,其他的运算只能和 number 数字类型的计算。
2、比较运算符
3、逻辑运算符
逻辑运算符只能作用于布尔值,否则将产生错误
空值处理
内建函数
内建函数语法格式: 变量+?+函数名称