Freemarker的语言概述


FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写。

FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序

虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据(如下图)


Freemarker的特性

分离了展示层和业务逻辑层

使用JSP开发过程中在页面中大量的存在业务逻辑的代码,使页面内容凌乱,在后期修改维护过程中变得非常困难。Freemarker根本不支持Java脚本代码,而是使用el表达式来展示数据。FreeMarker的设计初衷就是:模板 + 数据模型 = 输出,模板只负责在页面中展示,不涉及任何逻辑代码,而所有的逻辑都是由数据模型来处理。

降低数据库的压力

FreeMarker是将数据库中的数据做成页面静态化,这样就不需要 去数据库中去取数据,而是直接展现在页面。而页面静态化 主要用在电商的首页,或者其它地方。能够有效的减少数据库的压力。


FreeMarker的语法介绍

FreeMarker模板文件组成


1、文本,直接输出的部分

2、注释,即<#--...-->格式不会输出

3、FTL指令:FreeMarker指令,和HTML标记类似,名字前加#予以区分,不会输出

4、插值(Interpolation):即${..}或者#{..}格式的部分,将使用数据模型中的部分替代输出


 FTL指令规则

FreeMarker有三种FTL标签,这和HTML的标签是完全类似的

开始标签:<#directivename parameters>


结束标签:</#directivename>

空标签: <#directivename parameters />

实际上,使用标签时前面的#符号也可能变成@,如果该指令是一个用户指令而不是系统内建指令时,应将#符号改为@符号。


插值规则

FreeMarker的插值有如下两种类型

1、通用插值:${expr}

2、数字格式化插值:#{expr}或者#{expr;format}

表达式

表达式是FreeMarker的核心功能。表达式放置在插值语法(${...})之中时,表面需要输出表达式的值,表达式语法也可以与FreeMarker标签结合,用于控制输出

1、直接指定值

a、字符串: ${"我的文件保存在d:\\盘"};

b、数值

c、布尔值

d、日期型

FreeMarker支持date、time、datetime三种类型,这三种类型的值无法直接指定,通常需要借助字符串的date、time、datetime三个内建函数进行转换才可以

<#assigntest1 = "2015-01-22"?date("yyyy-MM-dd")/>;
 <#assign test2="16:34:43"?time("HH:mm:ss") />  
 <#assigntest2 = "2015-01-2217:23:45"?datetime("yyyy-MM-dd HH:mm:ss") /> 
 ${test1?string.full}

e、集合

 集合以方括号包括,各集合元素之间以英文逗号(,)分隔,看如下的示例:

<#list["星期一",,["星期二",["星期三",["星期四",["星期五"] as x>
 ${s};
</#list>

f、Map集合

Map对象使用花括号包括,Map中的key-value对之间以英文冒号(:)隔开,多组key-value对之间以英文逗号(,)隔开:

<#assign score = {"语文":78,"数学":83,"Java":89} > 

<#list score?key as x>
${x}--->${score[x]};
</#list>
<spanstylespanstyle="font-family:sans-serif,arial,verdana,trebuchet ms;line-height:1.6em"> </span>

2、输出变量值

FreeMarker的表达式输出变量时,这些变量可以是顶层变量,也可以是Map对象中的变量,还可以是集合中的变量,并可以使用点(.)语法来访问Java对象的属性

a、顶层变量