首先去freemarker官网下载源码jar包,本文是基于freemarker-2.3.21.tar.gz进行研究的。解压源码包,找到freemarker的源码部分导入eclipse工程中。需要注意的是:freemarker的ftl文件解析使用javacc实现的,所以源码中没有解析类(FMParse.java)。要想研究freemarker源码,往往还需要引入freemarker.jar(含有FMParse.class),否则源码会出现编译问题。
另外,还需要引入的jar包有:commons-logging.jar,log4j.jar,servlet-api.jar。最后设置一下日志的输出,方便我们查看底层运行情况。log4j.properties文件的内容如下所示:
log4j.rootLogger=DEBUG,A1,A2 #指定log输出目的,这里设为输出日志到指定目录的文件my.log中 log4j.appender.A1=org.apache.log4j.FileAppender log4j.appender.A1.File=logs/my.log #指定日志信息的格式 log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%c[%d]-%m%n #把A2输出到控制台 log4j.appender.A2=org.apache.log4j.ConsoleAppender log4j.appender.A2.layout=org.apache.log4j.PatternLayout log4j.appender.A2.layout.ConversionPattern=[%c][%d][%p]-%m%n
入门实例
首先在项目中建立存放模板的文件夹templates,然后放入模板文件person.ftl,内容如下:
Hello, my name is ${name}. I come from ${address}. Nice to meet you!
public class Test { public static void main(String[] args) throws IOException, TemplateException { Version version = new Version(2, 3, 1); Configuration cfg = new Configuration(version); cfg.setDirectoryForTemplateLoading(new File("templates")); cfg.setObjectWrapper(new DefaultObjectWrapper(version)); Template temp = cfg.getTemplate("person.ftl"); Map root = new HashMap(); root.put("name", "张三"); root.put("address", "中国-北京"); Writer out = new OutputStreamWriter(System.out); temp.process(root, out); out.flush(); } }
输出结果为:
Hello, my name is 张三. I come from 中国-北京. Nice to meet you!