FreeMarker介绍
FreeMarker的下载网址为http://freemarker.sourceforge.net/,我这里下载的是freemarker-2.3.16.rar。
FreeMarker是一个用Java编写的模板引擎,主要用来生成HTML Web页面,特别是基于MVC模式的应用程序。虽然FreeMarker具有一些编程的能力,通常由Java程序准备要显示的数据,由 FreeMarker模板生成页面。 FreeMarker可以作为Web应用框架一个组件,但它与容器无关,在非Web应用程序环境也能工作的很好。
FreeMarker中模板 + 数据 = 输出,在模板中需要程序运行中填充数据的地方我们使用${temp_name}来代替,在程序执行的时候我们只需要提供给temp_name指定名字的变量提供值的话在页面展示时就可以展示我们希望的值,实现了动态页面的效果。
1.数据模型
上图中变量扮演目录的角色(根root,animal,mouse,elephant,python,whatnot)被称为hash哈希表。哈希表通过可查找的名称(例如:”animal”, ”mouse”, ”price”)来访问存储的其他变量(如子变量)。
如果仅存储单值的变量(size,price,text和because)则它们被称为scalars标量。
如果要在模板中使用子变量,那应该从根root开始指定它的路径,每级之间用点来分隔。要访问price和mouse的话,应该从根开始,先是animals,然后是mouse,最后是price,所以应该这样写:animals.mouse.price。当放置${…}这种特定代码在表达式前后时,我们就告诉FreeMarker在那个位置上要来输出对应的文本。
标量存储单一的值,这种类型的值可以是字符串,数字,日期/时间或者是布尔值。
字符串:这是文本类型,字符的任意序列,使用单引号或双引号限定。如果包含特殊字符需要转义符:${"It's "quoted" andthis is a backslash: \"} ,有一类特殊的字符串:${r"C:\foo\bar"},输出结构为:C:\foo\bar,在引号前面加r被认为是纯文本。
数字:这是数值类型,直接输入,不需要引号。在FreeMarker中字符串”50”和数字50是两种完全不同的类型。前者只是两个字符的序列(这恰好是我们可以读的一个数字),而后者是一个可以在算数运算中直接使用的数值。比如${08}, ${+8}, ${8.00} and ${8} 都是相同的。
日期/时间:
Date(精确到天:date)。
Time(没有日期-天-部分,精确到毫秒)。
Date-time(又被成为:time stamp,精确到毫秒)。
布尔值:true和false,不使用引号。
哈希表是存储变量和与其相关且有唯一标识名称变量的容器。
序列(Sequences):存储有序变量的容器。存储的变量可以通过数字索引来检索,索引通常从零开始,获取Sequence(序列)片断-使用[startindex..endindex]。
例一:seq中存储了"a", "b", "c", "d","e",那么seq[1..2]包含了b和c两个值。
可以使用.variablename语法访问FreeMarker内置变量。
<#list ["winter", "spring", "summer", "autumn"] as x> ${x} </#list> 输出结果: winter spring summer autumn <html> <head> <title>Welcome!</title> </head> <body> <h1>Welcome ${user}!</h1> <p>Our latest product: <a href="${latestProduct.url}">${latestProduct.name}</a>! </body> </html> (root) | +- user = "Big Joe" | +- latestProduct | +- url = "products/greenmouse.html" | +- name = "green mouse"