FreeMarker快速上手
创建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");
也可以使用一个包含url 和 name 属性的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快速上手相关推荐
- 【快速上手mac必备】常用优质mac软件推荐(音视频、办公、软件开发、辅助工具、系统管理、云存储)
本文章的主要内容是我作为一名大四学生.准程序员.up主这三种身份来给大家推荐一下 mac 上好用的软件以及工具.本人也是从去年9月份开始从windows阵营转移到了mac阵营,刚开始使用的时候,也曾主 ...
- 【转】Vue.js 2.0 快速上手精华梳理
Vue.js 2.0 快速上手精华梳理 Sandy 发掘代码技巧:公众号:daimajiqiao 自从Vue2.0发布后,Vue就成了前端领域的热门话题,github也突破了三万的star,那么对于新 ...
- 『转载』Debussy快速上手(Verdi相似)
『转载』Debussy快速上手(Verdi相似) Debussy 是NOVAS Software, Inc(思源科技)发展的HDL Debug & Analysis tool,这套软体主要不是 ...
- [转载]ESFramework 4.0 快速上手(15) -- 客户端登录验证
ESFramework 4.0 快速上手(15) -- 客户端登录验证 在之前版本的Rapid引擎中,是没有提供客户端登陆验证的机制的,如果要验证用户的帐号密码信息,我们只有自己手动通过自定义信息来实 ...
- WijmoJS 2019V1正式发布:全新的在线 Demo 系统,助您快速上手,开发无忧
2019独角兽企业重金招聘Python工程师标准>>> 下载WijmoJS 2019 v1 WijmoJS是为企业应用程序开发而推出的一系列包含HTML5和JavaScript的开发 ...
- react 快速上手开发_React中测试驱动开发的快速指南
react 快速上手开发 by Michał Baranowski 通过MichałBaranowski React中测试驱动开发的快速指南 (A quick guide to test-driven ...
- 《Android App开发入门:使用Android Studio 2.X开发环境》——1-3 Android Studio 快速上手...
1-3 Android Studio 快速上手
- Keras快速上手:基于Python的深度学习
Keras快速上手:基于Python的深度学习 谢梁,鲁颖,劳虹岚 著 ISBN:9787121318726 包装:平装 开本:16开 正文语种:中文 出版社: 电子工业出版社 出版时间:2017-0 ...
- 快速上手关键词抽取的算法
前言 在自然语言处理领域,我们有一种类型的问题是如何在一堆文本中提取出核心词/句子.而无论是对于长文本还是短文本,往往几个关键词就可以代表整个文本的主题思想.同时,在很多推荐系统中,由于无法直接就整体 ...
最新文章
- 派森编程软件python-派森Python
- tomcat改项目的访问路径 ROOT
- html百度地图中心点不正确,百度地图嵌入弹出层,无法准确正确显示marker标记到中心位置的问题...
- ab apr_socket_recv: Connection reset by peer 错误解决
- LeetCode 353. 贪吃蛇(deque+set)
- Android逆向笔记-Unity3D逆向一般思路(静态分析)
- 关于配置中心的几个问题
- JS:ES6-8 Promise入门
- 通过Chrome浏览器检测和优化页面
- 2台电脑共享一套键鼠方法
- C语言 符号配对 (20分)
- RTL8153B ,瑞昱千兆网卡芯片 ,扩展坞HUB千兆网口芯片。
- C++Builder的基本功能
- 基于stm32单片机PT100铂电阻温度采集系统
- 图片质量与ISO 光圈 快门 测光 曝光与曝光补偿 焦距和焦距转换系数 景深与光圈优先 白平衡与RAW
- 腾讯实习生腾讯云后台一面面经
- ubuntu18安装N卡驱动
- 技术笔记:Indy IdSMTP支持腾讯QQ邮箱邮件发送
- linux注销系统有几种方法,怎么注销Linux子系统
- Houdini地形创建
热门文章
- Flex Accordion 和 TabNavigator组件浏览器跳转问题
- 为 Sublime Text 3059 配置 PHP 编译环境
- prefuse学习(二)显示一张图
- python实现定时发送qq消息
- Kotlin实现LeetCode算法题之Median of Two Sorted Arrays
- ListCtrl添加右键菜单(ListCtrl类里编辑,给ListCtrl 发送NM_RCLICK消息)
- STL之deque详解
- GIS管网项目-flex/java
- Android视图组成View
- Java SE 6 新特性: JMX 与系统管理(转载)-asp.net关注