昨天简单的说了下在web项目中怎么使用freemarker,其实也可以在普通的java项目中使用freemarker,和web使用没什么太大的区别,只是在设置模板所在的文件夹的方法上有所不同,在Java项目中使用的是setDirectoryForTemplateLoading方法,在web项目中使用的是setServletContextForTemplateLoading方法,下面来看看怎么在普通的Java项目中使用freemarker
1、新建一个Java工程;
2、添加freemarker的jar包,我使用的是2.3.19
3、下面看一个具体实现:
首先在template目录下新建一个template.ftl文件,在这个文件中写入一句话:${message} 这是一个freemarker模板文件
然后是java代码
package com.test.freemarker;
import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
/**
* 简单的freemarker测试类
* @author Administrator
*
*/
public class SimpleFreemarker {
private Configuration cfg ;
private Template template;
private StringWriter stringWriter;
private Map args;
/**
* 初始化方法
* @throws IOException
*/
public void init() throws IOException{
// 获取freemarker的Configuration实例
cfg = new Configuration();
//设置模板文件目录
cfg.setDirectoryForTemplateLoading(new File("template"));
// 取得模板文件
template = cfg.getTemplate("template.ftl");
//实例化一个字符串输出流
stringWriter = new StringWriter();
// 实例化一个放置参数的map
args = new HashMap();
}
/**
* 开始处理
* @throws TemplateException
* @throws IOException
*/
public void process() throws TemplateException, IOException{
//放置一个参数
args.put("message", "hello world");
//合并模板和数据模型,并输出到stringWriter中
template.process(args, stringWriter);
//打印结果
System.out.println(stringWriter.toString());
}
}
4,使用junit测试下这个类是否能正确工作:
package junit.test;
import java.io.IOException;
import org.junit.Test;
import com.test.freemarker.SimpleFreemarker;
import freemarker.template.TemplateException;
public class FreemarkerTest {
@Test
public void test(){
SimpleFreemarker s = new SimpleFreemarker();
try {
s.init();
s.process();
} catch (IOException e) {
e.printStackTrace();
} catch (TemplateException e) {
e.printStackTrace();
}
}
}
5,运行,输出结果:hello world 这是一个freemarker模板文件
不错,还是能正确工作的!