一、简介
FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
FreeMarker是免费的,基于Apache许可证2.0版本发布。其模板编写为FreeMarker Template Language(FTL),属于简单、专用的语言。需要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,主要用于如何展现数据, 而在模板之外注意于要展示什么数据。
二、环境搭建
1、通过maven搭建
pom.xml
<?xml version="1.0"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <groupId>com.xu.freemarker</groupId> <artifactId>freemarkerTest</artifactId> <version>0.0.1-SNAPSHOT</version> <name>freemarkerTest</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <!-- freemarker核心 jar --> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.19</version> </dependency> <!-- junit测试 jar --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency> </dependencies> </project>
2、freemarker工具类FreemarkerUtil.java
package com.xu.freemarker;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
public class FreemarkerUtil {
//getTemplate("01.ftl")
public Template getTemplate(String name){
//通过Freemarker的Configuration读取相应的ftl
Configuration cfg = new Configuration();
//设置去哪里读取相应的ftl模版文件
cfg.setClassForTemplateLoading(this.getClass(), "/ftl");
Template temp = null;
try {
//在模版文件目录中找到名称为name的文件
temp = cfg.getTemplate(name);
} catch (IOException e) {
e.printStackTrace();
}
return temp;
}
//通过Template可以将模版输出到相应的流中
public void print(String name, Map<String,Object> root){
Template temp = this.getTemplate(name);
try {
temp.process(root, new PrintWriter(System.out));
} catch (TemplateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//通过Template可以将模版输出到相应的文件中
public void fprint(String name, Map<String,Object> root, String outFile){
Template temp = this.getTemplate(name);
FileWriter fw = null;
try {
fw = new FileWriter(new File(outFile));
temp.process(root, fw);
} catch (IOException e) {
e.printStackTrace();
} catch (TemplateException e) {
e.printStackTrace();
} finally{
if(fw != null){
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
3、 测试类TestFreemarkter.java
package com.xu.freemarker;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import com.xu.freemarker.model.User;
public class TestFreemarkter {
FreemarkerUtil fu;
@Before
public void before(){
fu = new FreemarkerUtil();
}
@Test
public void test01(){
Map<String,Object> root = new HashMap<String,Object>();
root.put("username", "张三");
fu.print("01.ftl", root);
}
}
4、freemark文件01.ftl
您好,${username}
5、运行测试结果
您好,张三
freemarker环境搭建完毕
源码在附件中