上周花了一天在学FreeMarker,今天稍微整理了一下给自己做点笔记。
FreeMarker 是一个模板引擎,一个基于模板生成文本输出的通用工具。经常被设计用来生成WEB页面,特别是基于MVC
的应用程序。
FreeMarker基于设计者和程序员是具有不同专业技能的不同个体的观念.他们是分工劳动的:
设计者专注于表示——创建HTML文件、图片、Web页面的其它可视化方面;
程序员创建系统,生成设计页面要显示的数据.
经常会遇到的问题是:在Web页面(或其它类型的文档)中显示的信息在设计页面时是无效的,是基于动态数据的,你可
以在HTML(或其它要输出的文本)中加入一些特定指令,FreeMarker会在输出页面给最终用户时,用适当的数据替代这
些代码.
下图可以清晰的说明FreeMarker的模式:
从图上我们可以看出其模式为:模板 + 数据模型 = 输出
如果要学好FreeMarker,如果要深入FreeMarker的话,必须对其“模板”的语法进行举一反三的运用~~因为从其模式看来,“数据模型”对于程序员来说它并不陌生,无非就是些get和set;而对于“输出”其实也不难。
那么如何运用这个模板 + 数据模型 = 输出 的模式呢?
首先是创建一个模板
Configuration cfg = new Configuration();
cfg.setDirectoryForTemplateLoading(newFile("/where/you/store/templates"));
cfg.setObjectWrapper(new DefaultObjectWrapper());
2,
创建数据模型
Map root = new HashMap();
root.put("user", "Big Joe");
Map latest = new HashMap();
root.put("latestProduct", latest);
latest.put("url", "products/greenmouse.html");
latest.put("name", "green mouse");
获得模板
Template temp = cfg.getTemplate("test.ftl");
将模板与数据模型进行整合输出
Writer out = new OutputStreamWriter(System.out);
temp.process(root, out);
out.flush();
获得模板可以有多种方式,可以用setDirectoryForTemplateLoading也可以用setClassForTemplateLoading….第一种是直接设置一个存放模板的目录,而第二种是通过指定一个classpath进行设置,二种都是通过相对路径进行读取!
官方网站:http://freemarker.sourceforge.net/
官网快速入门(程序):http://freemarker.sourceforge.net/docs/pgui_quickstart.html