FreeMarker简介
FreeMarker 是一款模板引擎: 即一种基于模板和要改变的数据,并用来生成输出文本
(HTML 网页、电子邮件、配置文件、源代码等)的通用工具。FreeMarker 是免费的,基于
Apache 许可证 2.0 版本发布。其模板编写为 FreeMarker Template Language(FTL),属于简单、
专用的语言。
FreeMarker原理图
FreeMarker数据合成简单示例
(在线帮助文档-freeMarker)http://tool.oschina.net/apidocs/apidoc?api=freemarker
合成器代码片段(TestFreeMarker)
package gentener;
import freemarker.template.Configuration;
import freemarker.template.Template;
import java.io.File;
import java.io.FileWriter;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Map;
/**
* FreeMarker使用
*/
public class TestFreeMarker {
/* 公共类配置
可扩展配置
实现java.lang.Cloneable
该类封装了用于运行Freemarker的各种配置参数,并作为中心模板加载和缓存点。
请注意,该类使用默认策略加载和缓存模板。
您可以使用模板加载方法插入替换模板加载机制。
此对象未同步。因此,在您从多个线程开始访问对象后,设置不得更改。
如果使用多个线程,则在实例化配置对象后直接设置所有内容,Don'不再更改设置。
*/
private Configuration cfg;//Configuration 对象负责指定应该将哪一个 LoginModule 用于某一特定应用程序,以及应该以什么样的顺序调用 LoginModule。
public void init() throws Exception {
//初始化FreeMarker配置
//创建一个Configuration实例
cfg = new Configuration();//横线 表示此方法经过过时,有另外一种方法可以替代它
//设置FreeMarker的模板文件位置(两种方式)
cfg.setDirectoryForTemplateLoading(new File("D:\\object\\Test\\src\\main\\resources\\templates"));//setDirectoryForTemplateLoading()设置要从中加载模板的显式目录
//cfg.setClassForTemplateLoading(this.getClass(),"/templates/");//setClassForTemplateLoading()设置一个类,我们将根据该类调用加载模板。
}
/**
* 与模板合成 在控制台输出内容
*
* @throws Exception
*/
public void process() throws Exception {
Map root = new HashMap();//替换数据信息
root.put("name", "FreeMarker");
root.put("msg", "您已经完成了第一个FreeMarker的示例");
Template template = cfg.getTemplate("test.ftl");//创建模板文件对象
/*process():处理模板,使用映射中的数据,并将生成的文本输出给提供的编写程序,
然后使用配置的getObjectrapper()方法返回的默认对象包装器将映射的元素转换为模板模型。*/
template.process(root, new OutputStreamWriter(System.out));
}
/**
* 与模板合成 实现文件的生成
*
* @throws Exception
*/
public void process2() throws Exception {
System.out.println("---------------开始生成代码");
Map root = new HashMap();//替换数据信息
root.put("name", "FreeMarker2");
root.put("msg", "文件生成成功!");
OutputStreamWriter writer = null;
writer = new FileWriter("D:\\object\\Test\\src\\main\\java\\file\\test.html");
Template template = cfg.getTemplate("test.ftl");//创建模板文件对象
template.process(root, writer);
writer.flush();
writer.close();
}
}
模板文件(test.ftl)
<html>
<head><title>${name}</title></head>
<body>
<p>${msg}</p>
</body>
</html>
main方法
package gentener;
/**
* 入口
*/
public class main {
public static void main(String[] args)throws Exception{
TestFreeMarker test = new TestFreeMarker();
test.init();
//调用方法显示结果在控制台
test.process();
//生成文件方法
test.process2();
}
}
执行结果
(结合Freemarker 实现代码生成器欢迎观看我的另一篇博客)