Freemarker是一种模板引擎;一种基于模板的、用来生成输出文本的通用工具; 采用Freemarker能够生成各种文本:HTML、XML、Java源代码等等。 FreeMarker是一个基于模板生成文本输出的通用工具,使用纯Java编写。 FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序 虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据 FreeMarker不是一个Web应用框架,而适合作为Web应用框架一个组件。 FreeMarker与容器无关,因为它并不知道HTTP或Servlet;FreeMarker同样可以应用于非Web应用程序环境。 FreeMarker更适合作为Model2框架(如Struts)的视图组件,你也可以在模板中使用JSP标记库。 FreeMarker是免费的。
能够生成各种文本:HTML、XML、RTF、Java源代码等等 易于嵌入到你的产品中:轻量级;不需要Servlet环境 插件式模板载入器:可以从任何源载入模板,如本地文件、数据库等等 你可以按你所需生成文本:保存到本地文件;作为Email发送;从Web应用程序发送它返回给Web浏览器
强大的模板语言所有常用的指令:include、if/elseif/else、循环结构 在模板中创建和改变变量 几乎在任何地方都可以使用复杂表达式来指定值 命名的宏,可以具有位置参数和嵌套内容 名字空间有助于建立和维护可重用的宏库,或者将一个大工程分成模块,而不必担心名字冲突 输出转换块:在嵌套模板片段生成输出时,转换HTML转义、压缩、语法高亮等等;你可以定义自己的转换
通用数据模型FreeMarker不是直接反射到Java对象,Java对象通过插件式对象封装,以变量方式在模板中显示 你可以使用抽象(接口)方式表示对象(JavaBean、XML文档、SQL查询结果集等等),告诉模板开发者使用方法,使其不受技术细节的打扰
为Web准备在模板语言中内建处理典型Web相关任务(如HTML转义)的结构 能够集成到Model2 Web应用框架中作为JSP的替代 支持JSP标记库 为MVC模式设计:分离可视化设计和应用程序逻辑;分离页面设计员和程序员
智能的国际化和本地化字符集智能化(内部使用UNICODE) 数字格式本地化敏感 日期和时间格式本地化敏感 非US字符集可以用作标识(如变量名) 多种不同语言的相同模板
强大的XML处理能力和指令(2.3版本)用于递归遍历XML树。在模板中清楚和直觉的访问XML对象模型。开源论坛 JForum 就是使用了 FreeMarker 做为页面模板。
示例代码框架 第一步:新建Maven项目,添加依赖:
org.freemarker
freemarker
2.3.29
第二步:创建Freemarker工具类:
1:创建一个 Configuration 对象,直接 new 一个对象。构造方法的参数就是freemarker 的版本号。 2:设置模板文件所在的路径。 3:设置模板文件使用的字符集。一般就是 utf-8. 4:加载一个模板,创建一个模板对象。 5:创建一个模板使用的数据集,可以是 pojo 也可以是 map。一般是 Map。 6:创建一个 Writer 对象,一般创建一 FileWriter 对象,指定生成的文件名。 7:调用模板对象的 process 方法输出文件。 8:关闭流
public class FreemarkerUtil {
public static void execute(String ftlNameWithPath, Map data, Writer out) throws IOException, TemplateException {
Configuration cfg = new Configuration(Configuration.VERSION_2_3_25);//创建Freemarker配置实例
int i = ftlNameWithPath.lastIndexOf("/") == -1 ? ftlNameWithPath.lastIndexOf("\\") : ftlNameWithPath.lastIndexOf("/");
cfg.setDirectoryForTemplateLoading(new File(ftlNameWithPath.substring(0, i + 1)));//注意这里是文件夹的路径,不是文件的路径
cfg.setDefaultEncoding("UTF-8");
Template t1 = cfg.getTemplate(ftlNameWithPath.substring(i + 1));//加载模板文件
t1.process(data, out);
out.flush();
out.close();
}
}
第三步:在resources目录下创建模板文件test.ftl:
${username}:你好,欢迎学习Freemarker!
第四步:测试代码:
@Test
public void fun1() throws Exception {
String dir = "src\\main\\resources\\test.ftl";//模板路径
//创建数据模型
Map data = new HashMap();
data.put("username", "张三");
//显示生成的数据,//将合并后的数据打印到控制台
Writer out = new StringWriter();
FreemarkerUtil.execute(dir, data, out);
System.out.println(out.toString());
}
@Test
public void fun2() throws Exception {
String dir = "src\\main\\resources\\test.ftl";//模板路径
//创建数据模型
Map data = new HashMap();
data.put("username", "张三");
//将生成的数据保存到src/main/webapp/demo.txt文件中
Writer out = new FileWriter(new File("src/main/webapp/demo.txt"));
FreemarkerUtil.execute(dir, data, out);
}