创建Configuration实例

首先必须创建一个freemarker.template.Configuration 实例并调整其设置。Configuration 实例保存freemarker的设置,同时处理预解析的模板的创建和缓存。

通常应用程序的生命周期中只会创建一个Configuration实例。

   Configuration cfg = new Configuration();
// 指定模板文件的数据源,这里是一个文件目录。cfg.setDirectoryForTemplateLoading(new File("/where/you/store/templates"));
// 指定模板如何发现数据模型,这是一个高级主题,暂且这样使用。
cfg.setObjectWrapper(new DefaultObjectWrapper());   

目前我们使用单个的Configuration实例。不过如果一个系统有多个独立的组件使用FreeMarker,它们会使用各自的Configuration 实例。

创建数据模型

我们可以简单地使用java.lang java.util 和自定义的JavaBean构建对象模型,比如我们构建数据模型如下:

   (root)|+- user = "Big Joe"|+- latestProduct|+- url = "products/greenmouse.html"|+- name = "green mouse"  

如下是构建数据模型的代码:

// Create the root hash
Map root = new HashMap();
// Put string ``user'' into the root
root.put("user", "Big Joe");
// Create the hash for ``latestProduct''
Map latest = new HashMap();
// and put it into the root
root.put("latestProduct", latest);
// put ``url'' and ``name'' into latest
latest.put("url", "products/greenmouse.html");
latest.put("name", "green mouse");  

也可以使用一个包含urlname 属性的JavaBean实例表示lastestProduct。

获取模板

模板通过freemarker.template.Template实例表示。通常从Configuration 实例中获取Template实例,任何时候都可以调用getTemplate方法获取一个Template 实例。假定模板文件test.ftl 保存在先前设置的目录中:

Template temp = cfg.getTemplate("test.ftl"); 

上述代码将读取,解析/where/you/store/templates/test.ftl文件,创建一个对应的Template实例 。

Configuration 缓存Template 实例, 因此当需要再次获取test.ftl 文件, 将不会创建一个新的Template实例。

合并模板和数据模型

就我们所知,数据模型+模板=输出,通过调用模板的process 方法合并数据模型和模板,process. 方法接受一个数据模型根和一个writer作为参数,将结果输出到Writer。 为简化起见,这里输出到控制台。

Writer out = new OutputStreamWriter(System.out);
temp.process(root, out);
out.flush();  

一旦获取一个Template 实例,可以合并不同的数据模型和一个模板(Template 实例基本上是无状态的),而test.ftl只会当Template 实例被创建的时候访问一次。

当然这里的out可以为文件,可以是XML、java等你想要的任何文件类型,这样就实现在代码的生成.

整合

这是先前代码片断的源文件,不要忘记将freemarker.jar放在CLASSPATH.中。

import freemarker.template.*;
import java.util.*;
import java.io.*;public class Test {public static void main(String[] args) throws Exception {/* ------------------------------------------------------------------- */    /* You usually do it only once in the whole application life-cycle:    */    /* Create and adjust the configuration */Configuration cfg = new Configuration();cfg.setDirectoryForTemplateLoading(new File("/where/you/store/templates"));cfg.setObjectWrapper(new DefaultObjectWrapper());/* ------------------------------------------------------------------- */    /* You usually do these for many times in the application life-cycle:  */    /* Get or create a template */Template temp = cfg.getTemplate("test.ftl");/* Create a data model */Map root = new HashMap();root.put("user", "Big Joe");Map latest = new HashMap();root.put("latestProduct", latest);latest.put("url", "products/greenmouse.html");latest.put("name", "green mouse");/* Merge data model with template */Writer out = new OutputStreamWriter(System.out);temp.process(root, out);out.flush();}
}  

FreeMarker快速上手相关推荐

  1. 【快速上手mac必备】常用优质mac软件推荐(音视频、办公、软件开发、辅助工具、系统管理、云存储)

    本文章的主要内容是我作为一名大四学生.准程序员.up主这三种身份来给大家推荐一下 mac 上好用的软件以及工具.本人也是从去年9月份开始从windows阵营转移到了mac阵营,刚开始使用的时候,也曾主 ...

  2. 【转】Vue.js 2.0 快速上手精华梳理

    Vue.js 2.0 快速上手精华梳理 Sandy 发掘代码技巧:公众号:daimajiqiao 自从Vue2.0发布后,Vue就成了前端领域的热门话题,github也突破了三万的star,那么对于新 ...

  3. 『转载』Debussy快速上手(Verdi相似)

    『转载』Debussy快速上手(Verdi相似) Debussy 是NOVAS Software, Inc(思源科技)发展的HDL Debug & Analysis tool,这套软体主要不是 ...

  4. [转载]ESFramework 4.0 快速上手(15) -- 客户端登录验证

    ESFramework 4.0 快速上手(15) -- 客户端登录验证 在之前版本的Rapid引擎中,是没有提供客户端登陆验证的机制的,如果要验证用户的帐号密码信息,我们只有自己手动通过自定义信息来实 ...

  5. WijmoJS 2019V1正式发布:全新的在线 Demo 系统,助您快速上手,开发无忧

    2019独角兽企业重金招聘Python工程师标准>>> 下载WijmoJS 2019 v1 WijmoJS是为企业应用程序开发而推出的一系列包含HTML5和JavaScript的开发 ...

  6. react 快速上手开发_React中测试驱动开发的快速指南

    react 快速上手开发 by Michał Baranowski 通过MichałBaranowski React中测试驱动开发的快速指南 (A quick guide to test-driven ...

  7. 《Android App开发入门:使用Android Studio 2.X开发环境》——1-3 Android Studio 快速上手...

    1-3 Android Studio 快速上手

  8. Keras快速上手:基于Python的深度学习

    Keras快速上手:基于Python的深度学习 谢梁,鲁颖,劳虹岚 著 ISBN:9787121318726 包装:平装 开本:16开 正文语种:中文 出版社: 电子工业出版社 出版时间:2017-0 ...

  9. 快速上手关键词抽取的算法

    前言 在自然语言处理领域,我们有一种类型的问题是如何在一堆文本中提取出核心词/句子.而无论是对于长文本还是短文本,往往几个关键词就可以代表整个文本的主题思想.同时,在很多推荐系统中,由于无法直接就整体 ...

最新文章

  1. 派森编程软件python-派森Python
  2. tomcat改项目的访问路径 ROOT
  3. html百度地图中心点不正确,百度地图嵌入弹出层,无法准确正确显示marker标记到中心位置的问题...
  4. ab apr_socket_recv: Connection reset by peer 错误解决
  5. LeetCode 353. 贪吃蛇(deque+set)
  6. Android逆向笔记-Unity3D逆向一般思路(静态分析)
  7. 关于配置中心的几个问题
  8. JS:ES6-8 Promise入门
  9. 通过Chrome浏览器检测和优化页面
  10. 2台电脑共享一套键鼠方法
  11. C语言 符号配对 (20分)
  12. RTL8153B ,瑞昱千兆网卡芯片 ,扩展坞HUB千兆网口芯片。
  13. C++Builder的基本功能
  14. 基于stm32单片机PT100铂电阻温度采集系统
  15. 图片质量与ISO 光圈 快门 测光 曝光与曝光补偿 焦距和焦距转换系数 景深与光圈优先 白平衡与RAW
  16. 腾讯实习生腾讯云后台一面面经
  17. ubuntu18安装N卡驱动
  18. 技术笔记:Indy IdSMTP支持腾讯QQ邮箱邮件发送
  19. linux注销系统有几种方法,怎么注销Linux子系统
  20. Houdini地形创建

热门文章

  1. Flex Accordion 和 TabNavigator组件浏览器跳转问题
  2. 为 Sublime Text 3059 配置 PHP 编译环境
  3. prefuse学习(二)显示一张图
  4. python实现定时发送qq消息
  5. Kotlin实现LeetCode算法题之Median of Two Sorted Arrays
  6. ListCtrl添加右键菜单(ListCtrl类里编辑,给ListCtrl 发送NM_RCLICK消息)
  7. STL之deque详解
  8. GIS管网项目-flex/java
  9. Android视图组成View
  10. Java SE 6 新特性: JMX 与系统管理(转载)-asp.net关注