首先去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!

转载于:https://www.cnblogs.com/cz-xjw/p/4987164.html

freemarker入门实例与源码研究准备工作相关推荐

  1. Linux/Unix服务端和客户端Socket编程入门实例(含源码下载)

    前言 本章节是用基本的Linux/Unix基本函数编写一个完整的服务器和客户端例子,可在Linux(ubuntu)和Unix(freebsd)上运行,客户端和服务端的功能如下: 客户端从标准输入读入一 ...

  2. 前端入门之(vuex源码解析三)

    上两节前端入门之(vuex源码解析二)我们把vuex的源码大概的撸了一遍,还剩下(插件.getters跟module),我们继续哈~ 插件童鞋们可以去看看vuex在各个浏览器的状态显示插件,小伙伴可以 ...

  3. WebRTC源码研究(1)WebRTC架构

    文章目录 WebRTC源码研究(1)WebRTC架构 1. WebRTC简介 2. WebRTC的能力 2.1 抓住属于WebRTC的5G时代风口 2.1.1 浏览器的支持情况 2.1.2 大厂的加入 ...

  4. Apache Camel源码研究之Rest

    本文以Camel2.24.3 + SpringBoot2.x 为基础简单解读Camel中的Rest组件的源码级实现逻辑. 0. 目录 1. 前言 2. 源码解读 2.1 启动时 2.1.1 `Rest ...

  5. WebRTC源码研究(4)web服务器工作原理和常用协议基础(转载)

    前言 前面3篇博客分别对WebRTC框架的介绍,WebRTC源码目录,WebRTC的运行机制进行了介绍,接下来讲解一点关于服务器原理的知识.后面博客会写关于WebRTC服务器相关的开发,目前git上面 ...

  6. Apache Camel源码研究之Intercept

    Intercept作为一个极其强大的扩展机制,其理念几乎存在于所有知名框架中,诸如Spring,Mybatis,Tomcat等等都无一例外地提供了相应的支持,在保持自身框架本身整洁的同时,实现对各类业 ...

  7. 二、Neo4j源码研究系列 - 单步调试

    二.Neo4j源码研究系列 - 单步调试 一.背景介绍 上一篇我们已经把了neo4j的源码准备以及打包流程完成了,本篇将讲解如何对neo4j进行单步调试.对于不了解如何编译打包neo4j的读者,请阅读 ...

  8. C#共享内存实例 附源码

    原文 C#共享内存实例 附源码 网上有C#共享内存类,不过功能太简单了,并且写内存每次都从开头写.故对此进行了改进,并做了个小例子,供需要的人参考. 主要改进点: 通过利用共享内存的一部分空间(以下称 ...

  9. 一起谈.NET技术,.NET Framework源码研究系列之---万法归宗Object

    经过前面三篇关于.NET Framework源码研究系列的随笔,相信大家都发现其实.NET Framework的实现其实并不复杂,也许跟我们自己做的项目开发差不多.本人也是这样的看法.不过,经过仔细深 ...

最新文章

  1. std::bind介绍
  2. OpenGL shader interpolation 着色器插值的实例
  3. Django的model中日期字段设置默认值的问题
  4. Homebrew简介和基本使用
  5. heart beat 安装与配置
  6. 踩坑事件:windows操作系统下的eclipse中编写SparkSQL不能从本地读取或者保存parquet文件
  7. 记录ssl证书过期,更新证书的过程
  8. Centi和HandCash共同开发支付握手协议
  9. java解压rar5 兼容rar4(改bug)
  10. 智慧物联下主机加固安全解决方案分析
  11. DSPE-PEG-Biotin,CAS:385437-57-0,磷脂-聚乙二醇-生物素可延长循环半衰期
  12. 中职双师型教师计算机培训总结,中职教师教学能力远程培训总结范文(精选3篇)...
  13. 天然场景文本检测识别技术综述
  14. 浅谈VVC(H.266)的变换模块
  15. CRNN端到端文本识别复现实践
  16. css3新增动画属性(过度动画 变形动画 关键帧动画)
  17. python爬虫好友图片_用itchat库爬取你所有微信好友的头像,并合成一张大图
  18. 2021年化工自动化控制仪表及化工自动化控制仪表实操考试视频
  19. Contest1065 - 第四届“图灵杯”NEUQ-ACM程序设计竞赛(个人赛)E粉丝与分割平面...
  20. JS与JQuery分别实现淘宝(五星好评特效)

热门文章

  1. Windows下python虚拟环境pip依旧使用全局pip的解决办法
  2. python中index函数_python中index函数的用法
  3. 理解Windows内核模式与用户模式(新)
  4. 采用CreateThread()创建多线程程序
  5. 未来教育计算机二级为什么分数很低,计算机二级考试失分了却不知道为什么?...
  6. 吴恩达深度学习笔记9-Course3-Week2【机器学习策略(ML Strategy)2】
  7. 前有教授被骗千万,后有某重点高校青年教师晒出月薪900的工资条,大学老师工资待遇如何?...
  8. 【机器学习】聚类代码练习
  9. 【Python】精选30张炫酷的动态交互式图表,Pandas一键生成,通俗易懂
  10. Python业务分析实战|共享单车数据挖掘