FreeMarker 基础总结

本文介绍了FreeMarker的基本概念及其使用方法,包括配置环境、创建模板、数据传递及输出控制等内容。

前言   

        作为一个正在学习中的程序员小菜鸟,要学的东西很多,会读很多帖子博客。但是有很多东西都是边学边忘,今天偶然看到一篇文章写到好记性不如烂笔头,于是我决定也把学到的东西记录一下,也许多年后的某天翻出来看看会觉得,以前写的技术点怎么这么幼稚,但是想想也是一件有趣的事。

 

我理解的FreeMarker

        FreeMarker是一种后台的模板引擎,由JAVA编译,和一些前端框架不同,类似于juicer这些前端模板引擎都是由JS引擎解析的。我学习FreeMarker是为了来制作代码生成器的。最初学习的时候网上都是将HTML作为例子来演示的,一度让我认为FreeMarker只能用来生成HTML,可以说是让我走了不少弯路。

 

FreeMarker的使用

    建议在读这一部分的时候先读一下官方文档,因为我可能不会说的很细,我只写一下我觉得我需要记的。

    使用FreeMarker最初当然是要先New一个Configuration对象,Configuration 是一个存放公共配置信息,以及模版(Template)可使用的全局共享变量的一个对象。建议将他设为一个单例对象,因为说过了他存放的是一些公共配置信息,这些信息激活全部都是一样的。所以说没有必要每次都New一个新的对象

 Configuration configuration = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);
Configuration configuration = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);

    New了Configuration对象只有就可以给他公共配置信息了,比如下面这个就是告诉它我的模板文件都放在哪里。 一般配置文件和一些resource资源文件一样,放在和src同等级的目录下面,此处叫templates,并且以 ".ftl" 为后缀名。

 

configuration.setDirectoryForTemplateLoading(new File("templates"));

    还有一个就是下面这句,相比很多人一看就懂了“UTF-8”嘛,一看就是设置字符编码的。

configuration.setDefaultEncoding("UTF-8");

    现在配置完成了,下一步我们就是要来使用了,使用的第一步就是获取模板(Template)。这里我们获取一个模板,模板文件名称叫user.ftl。

 Template temp = ConfigUtil.getInstance().getConfiguration().getTemplate("user.ftl");

    他的内容如下

姓名:${userName}
年龄:${userAge}
性别:${sex}

    可以看到它里面有几个${...}的占位符。其实他就是我们生成代码的关键了,${...}大括号中的值,其实就是一个key,模板引擎在编译的时候是通过其中的这个key来查找数据的。在模板当中有很多的,指令比如#list、#if,在后面我会慢慢说的。

   

    接下来说说怎么将值传入模板,将值传入模板有两种方式,1、用map集合 2、用JavaBean传值。

    先来说说Map集合传值,其实很简单,在之前介绍模板的时候说了,${..} 大括号中其实就是一个key,只要我们的map集合中的key和${...}中的key对应上,就能将map中的值,赋给模板中的${...}了。比如:

    我们之前写的模板是

 

姓名:${userName}
年龄:${userAge}
性别:${sex}

    那么我们的map集合就应该是

Map<String,Object> root =new HasMap<String,Object>();

root.put("userName","张三");
root.put("userAge",18);
root.put("sex",‘男’);

    这就是用Map传值,需要注意的是,在New Map的时候值最好用Object,因为鬼知道我们会传什么什么类型值,可能是基本数据类型,可能是一个集合,还有可能是一个对象。如果用Map传值你已经会了,那么JavaBean就更简单了,只要JavaBean中的属性名和对应上就可以了,在这里就不多做赘述了。

   

    现在模板已经写好了,传的值也准备好了,我们就来看看怎么将他们编译到一起吧。

    在将他们编译到一次之前还需要准备一样东西。就是一个输出流,他决定了我们编译后的文件是什么类型,到哪里去。比如

    我New一个这样的输出流 :

 Writer out = new OutputStreamWriter(System.out);

    他的意味着将我们编译后的数据输出到控制台中。

    在或者

Writer out = new FileWriter("D:\\FreeMark\\freemark.txt");

    这意味着将我们编译后数据输出到,本地磁盘D盘的FreeMarker文件夹下的freemark.txt文件中去。

    通过这里我们知道了,其实我们生成的文件是什么类型,到哪里去都是在这里决定的。这也是在我最初学习的时候遇到的最困扰我的地方,那些教程让我认为她只能输出成HTML文件,可能是我太愚钝了吧。

    好了言归正传,下面开始我们的最后一步。在这里就要用到之前建的模板对象了(temp)了。

temp.process(root,out);

    OK!搞定了,到这一步你已经成功的写了一个FreeMarker的程序。是不是很简单。只需要调用模板对象的process()方法就可以了,方法中有两个值,第一个是我们传的JavaBean或者Map,第二个传输出流。需要注意的是模板中的传的值中,要包含模板中全部的key。不然会报错呦。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值