FreeMarker–页面静态化技术
FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
FreeMarker 全称 FreeMarker Template Language (FTL / ftl)
FreeMarker主要由 Template file (模板文件) 和 Java object (Java数据)共同生成
Template file (模板文件)
<html>
.........
hello ${name}
.........
</html>
Java object (Java数据)
.........
data.name = "小明";
.........
Template file (模板文件)+ Java object (Java数据)
===>生成一个静态化页面
Output
<html>
.........
hello 小明;
.........
</html>
注意事项:
模板:必须是.ftl后缀结尾的文件
数据:数据类型必须是Map对象或者Java实体类 List集合不行
FreeMarker中一些常用的标签使用案例
if标签
官方参考
http://freemarker.foofun.cn/ref_directive_if.html
<#if age lt 16> // lt=>小于
未成年!
<#else>
成年了!
</#if>
list标签
官方参考
http://freemarker.foofun.cn/ref_directive_list.html
<#list users as user> // users是源数据,user是对象
${user.name}===${user.age}
</#list>
页面静态化技术的编程步骤
1**.导入核心Freemarker.jar包**
**2.获取模板对象**
获取Configuration对象 //为了获取模板对象
Configuration config = new Configuration(Configuration.VERSION_2_3_28); //参数是版本号
设置默认的加载路径
File file = new File(路径);
config.setDirectoryForTemplateLoading(file);
设置编码集
config.setDefaultEncoding("utf-8");
获取模板
Template template = config.getYemplate(模板名);
**3.准备数据**
时间戳(生成的模板的名字)
Long time = System.cuttentTimeMillis();
设置文件的保存名
String url = time + suffix; //生成的文件名 + 后缀
**4.生成静态资源**
FileWriter Out = new FileWriter(new File(file,url));
生成静态化页面
template.process(obj,out); //obj = Java数据:Map/实体类
**5.关流**
out.cloes();
**6.返回生成的文件全名用于保存**
return url;
下面是封装的一个FreeMarker的一个工具类 需要的小伙伴自取
方法一共需要4个参数
1.String templatePath ==>默认加载路径
2.String templateName ==>模板名
3.Object data ==>Java数据:Map集合或者Java实体类
4.String suffix ==>生成的静态化文件的后缀
如:
//路径
String Path = req.getServletContext().getRealPath("/static/template");
//模板
String url = FreeMarkerUtil.createFile(Path, "story.ftl", story, ".html");
下面是工具类的代码
package ys168.gonna.util;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import ys168.gonna.domain.ArticleType;
import freemarker.template.Configuration;
import freemarker.template.Template;
public class FreeMarkerUtil {
public static String createFile(String templatePath,String templateName,Object data,String suffix){
FileWriter out = null;
try {
// 重要:模板(.ftl)和数据(Map对象或Java实体 ,但是List集合不行)
// 1.导入freemarker.jar
// 2.获取模板(Template)对象
// 获取Configuration对象 -- 为了获取模板对象
Configuration config = new Configuration(Configuration.VERSION_2_3_28);
// 设置默认加载路径
File file = new File(templatePath);
config.setDirectoryForTemplateLoading(file);
// 设置默认编码
config.setDefaultEncoding("utf-8");
// 获取模板
Template template = config.getTemplate(templateName);
// 3.准备数据
// map
// java实体对象
// 时间戳
long time = System.currentTimeMillis();
String url = time+suffix;
// 4.template.process()生成静态资源
out = new FileWriter(new File(file, url));
template.process(data, out);
return url;
// 5.创建xxx.ftl模板
// 模板中使用el表达式获取数据
// 6.测试运行
} catch (Exception e) {
e.printStackTrace();
}finally{
if (out!=null) {
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return null;
}
}