FreeMarker根据Fti模板生成HTML
一,认识FreeMarker
FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写。
FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序。
虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据,简单来讲就是模板加数据模型,然后输出页面(如下图)
FreeMarker不是一个Web应用框架,而适合作为Web应用框架一个组件
FreeMarker与容器无关,因为它并不知道HTTP或Servlet;FreeMarker同样可以应用于非Web应用程序环境
FreeMarker更适合作为Model2框架(如Struts)的视图组件,你也可以在模板中使用JSP标记库
FreeMarker是免费的
而且你还可以通过Eclipse的插件来编辑FreeMarker,经过验证,FreeMarker 最好的 Eclipse 编辑插件是 JBoss Tools。
在Maven中使用它:
<dependency>
<groupId>freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.9</version>
</dependency>
二,代码实现
首先来新建一个类FreeMarkerDemo
public class FreeMarkerDemo {
public static void main(String[] args) throws IOException, TemplateException {
//第一步:实例化Freemarker的配置类
Configuration conf = new Configuration();
//第二步:给配置类设置路径
String dir = "路径";
conf.setDirectoryForTemplateLoading(new File(dir));
//获取模板
Template template = conf.getTemplate("模板名称");
//第三步:处理模板及数据之间将数据与模板合成一个HTML
Writer out = new FileWriter(new File(dir+"输出页面名称.html"));
//第四步:定义数据
Map<String,Object> root = new HashMap<String,Object>();
//对象
Person p = new Person("111", "哈哈哈");
root.put("person", p);
root.put("world", "世界你好");
root.put("cur_time", new Date());
//Map
Map<String,String> mx = new HashMap<String,String>();
mx.put("alingluo", "阿灵罗");
mx.put("lling", "罗零");
root.put("mx", mx);
//list
List<String> persons=new ArrayList<>();
persons.add("1");
persons.add("2");
persons.add("3");
root.put("persons",persons);
List<Person> list = new ArrayList();
list.add(new Person("中国","北京"));
list.add(new Person("中国","上海"));
list.add(new Person("美国","纽约"));
root.put("lst", list);
//第四步:输出html
template.process(root, out);
out.flush();
//第五步:关闭流
out.close();
}
}
三,编写模板
自定义路径并添加,名称后缀.Ftl
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<center>
${person.id} ${person.name}<br />
<#list persons as person> ${person} </#list> <br />
<!--Map写法 -->
${mx.alingluo}/${mx.lling}
表格 <br />
<#list lst as dizhi >
<b>${dizhi.id}</b><b>${dizhi.name}</b> <br/>
</#list>
</center>
</body>
</html>