目录
1.freemaker页面静态化的介绍
FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
模板编写为FreeMarker Template Language (FTL)。它是简单的,专用的语言, 不是 像PHP那样成熟的编程语言。 那就意味着要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,你可以专注于如何展现数据, 而在模板之外可以专注于要展示什么数据。
在所有采用网页静态化手段的网站中,FreeMarker使用的比例大大的超过了其他的一些技术。HTML静态化也是某些缓存策略使用的手段,对于系统中频繁使用数据库查询但是内容更新很小的应用,可以使用FreeMarker将HTML静态化。比如一些网站的公用设置信息,这些信息基本都是可以通过后台来管理并存储在数据库中,这些信息其实会大量的被前台程序调用,每一次调用都会去查询一次数据库,但是这些信息的更新频率又会很小,因此也可以考虑将这部分内容进行后台更新的时候进行静态化,这样就避免了大量的数据库访问请求,从而也就提高了网站的性能 。与JSP相比,FreeMarker的一个优点在于不能轻易突破模板语言开始编写Java代码,因此降低了领域逻辑漏进视图层的危险几率。
freemarker官网:http://freemarker.foofun.cn/
2.freemaker的使用方法
2.1导入依赖
首先需要创建一个工程,我这里使用的maven,导入依赖
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
2.2使用freemarker
根据官方给的文档可以看出,使用freemarker就是,自己提供模板文件Template和数据model,将Template于model提供给freemarker,帮我们输出对应的静态页面
2.2.1编写模板文件Template
在src/main/resources下创建两个目录,一个用于存放模板,一个用于存放生成的静态页面
其中模板的内容为
<html>
<head>
<title>freemarker入门</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
${hello}
</body>
</html>
2.2.2提供model并生成静态页面
使用步骤:
第一步:创建一个Configuration对象,直接new一个对象。构造方法的参数就是freemarker对于的版本号。
第二步:设置模板文件所在的路径。
第三步:设置模板文件使用的字符集。一般就是utf-8.
第四步:加载一个模板,创建一个模板对象。
第五步:创建一个模板使用的数据集,可以是pojo也可以是map。一般是Map。
第六步:创建一个Writer对象,一般创建一FileWriter对象,指定生成的文件名。
第七步:调用模板对象的process方法输出文件。
第八步:关闭流。
package com.freemarker.test;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
public class GenHtm {
// 生成静态页面的方法
/**
* freemarker入门
* @throws IOException
* @throws TemplateException
*/
@Test
public void genHtmlTest() throws IOException, TemplateException {
// 第一步:创建一个Configuration对象,直接new一个对象。构造方法的参数就是freemarker对于的版本号。
Configuration configuration = new Configuration(Configuration.getVersion());
// 第二步:设置模板文件所在的路径。
configuration.setDirectoryForTemplateLoading(new File(
"F:\\code\\eclisep-taotao\\freemarker\\src\\main\\resources\\template"));
// 第三步:设置模板文件使用的字符集。一般就是utf-8.
configuration.setDefaultEncoding("utf-8");
// 第四步:加载一个模板,创建一个模板对象。
Template template = configuration.getTemplate("hello.htm");
// 第五步:创建一个模板使用的数据集,可以是pojo也可以是map。一般是Map。
Map<Object, Object> model = new HashMap<>();
model.put("hello", "hello world");
// 第六步:创建一个Writer对象,指定生成的文件名。
FileWriter writer = new FileWriter(new File("F:\\code\\eclisep-taotao\\freemarker\\src\\main\\resources\\freemarker\\hello.html"));
// 第七步:调用模板对象的process方法输出文件。
template.process(model, writer);
// 第八步:关闭流。
writer.close();
}
}
直接运行即可,看到生成的静态页面。
在模板中的${hello},在静态页面中被渲染成hello world