FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写
l FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序
l 虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据(如下图)
模板 + 数据模型 = 输出
l FreeMarker不是一个Web应用框架,而适合作为Web应用框架一个组件
l FreeMarker与容器无关,因为它并不知道HTTP或Servlet;FreeMarker同样可以应用于非Web应用程序环境
l FreeMarker更适合作为Model2框架(如Struts)的视图组件,你也可以在模板中使用JSP标记库
l FreeMarker是免费的
(1)实例代码:
package freemaker; import java.io.File; import java.io.FileWriter; import java.io.Writer; import java.util.HashMap; import java.util.Map; import freemarker.template.Configuration; import freemarker.template.Template; public class FreeMarkerDemo { public static void main(String[] args) { // 配置对象 .html Configuration conf = new Configuration(); // 模板路径 String dir = "D:\\workspace2\\freemaker\\ftl\\"; try { // 导入模板目录 conf.setDirectoryForTemplateLoading(new File(dir)); // 获取模板 Template template = conf.getTemplate("freemaker.html"); // 数据 Map root = new HashMap(); root.put("world", "世界"); // 输出流 Writer out = new FileWriter(new File(dir + "hello.html")); // 生成开始 template.process(root, out); out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } System.out.println("生成完毕"); } }
(2)返回对象
Person p = new Person(); p.setId(9527); p.setName("华安"); root.put("per", p); 编号:${per.id}<br/> 姓名:${per.name}<br/>
(3)遍历List
List<Person> list = new ArrayList<Person>(); for(int i =0;i<10;i++){ Person p = new Person(); p.setId(9527+i); p.setName("华安"+i); list.add(p); } root.put("list", list); <#list list as p> ${p.id} -- ${p.name} </#list>
(4)遍历Map
Map map = new HashMap(); map.put("id", "1001"); map.put("name", "秋香"); root.put("map", map); <#list map?keys as key> ${map[key]} </#list>
(5)遍历List<Map>
Map map = new HashMap(); map.put("id", "1001"); map.put("name", "秋香"); Map map2 = new HashMap(); map2.put("id", "1002"); map2.put("name", "石榴姐"); List<Map> maplist = new ArrayList<Map>(); maplist.add(map); maplist.add(map2); root.put("maplist", maplist); <#list maplist as map> <#list map?keys as key> ${map[key]} </#list> </#list>
(6)遍历if else
<#list ["星期一","星期二","星期三"] as n> <#if n!="星期一"> ${n} <#else> 您好今天是星期一 </#if> </#list>
(7)时间处理
root.put("dt", new Date()); 年月时间:${dt?datetime}<br/> 时间:${dt?time}