`
summernight
  • 浏览: 74619 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论
阅读更多
FreeMarker概述

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

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

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

l???????? FreeMarker不是一个Web应用框架,而适合作为Web应用框架一个组件

l???????? FreeMarker与容器无关,因为它并不知道HTTPServletFreeMarker同样可以应用于非Web应用程序环境

l???????? FreeMarker更适合作为Model2框架(如Struts)的视图组件,你也可以在模板中使用JSP标记库

l???????? FreeMarker是免费的

?

?

1、通用目标

l???????? 能够生成各种文本:HTMLXMLRTFJava源代码等等

l???????? 易于嵌入到你的产品中:轻量级;不需要Servlet环境

l???????? 插件式模板载入器:可以从任何源载入模板,如本地文件、数据库等等

l???????? 你可以按你所需生成文本:保存到本地文件;作为Email发送;从Web应用程序发送它返回给Web浏览器

?

2、强大的模板语言

l???????? 所有常用的指令:includeif/elseif/else、循环结构

l???????? 在模板中创建和改变变量

l???????? 几乎在任何地方都可以使用复杂表达式来指定值

l???????? 命名的宏,可以具有位置参数和嵌套内容

l???????? 名字空间有助于建立和维护可重用的宏库,或者将一个大工程分成模块,而不必担心名字冲突

l???????? 输出转换块:在嵌套模板片段生成输出时,转换HTML转义、压缩、语法高亮等等;你可以定义自己的转换

?

3、通用数据模型

l???????? FreeMarker不是直接反射到Java对象,Java对象通过插件式对象封装,以变量方式在模板中显示

l???????? 你可以使用抽象(接口)方式表示对象(JavaBeanXML文档、SQL查询结果集等等),告诉模板开发者使用方法,使其不受技术细节的打扰

?

4、为Web准备

l???????? 在模板语言中内建处理典型Web相关任务(如HTML转义)的结构

l???????? 能够集成到Model2 Web应用框架中作为JSP的替代

l???????? 支持JSP标记库

l???????? MVC模式设计:分离可视化设计和应用程序逻辑;分离页面设计员和程序员

?

5、智能的国际化和本地化

l???????? 字符集智能化(内部使用UNICODE

l???????? 数字格式本地化敏感

l???????? 日期和时间格式本地化敏感

l???????? US字符集可以用作标识(如变量名)

l???????? 多种不同语言的相同模板

?

6、强大的XML处理能力

l???????? <#recurse> <#visit>指令(2.3版本)用于递归遍历XML

l???????? 在模板中清楚和直觉的访问XML对象模型

?

FreeMarker设计指南(1)


?

?

?

1、快速入门

1)模板 + 数据模型 = 输出

l???????? FreeMarker基于设计者和程序员是具有不同专业技能的不同个体的观念

l???????? 他们是分工劳动的:设计者专注于表示——创建HTML文件、图片、Web页面的其它可视化方面;程序员创建系统,生成设计页面要显示的数据

l???????? 经常会遇到的问题是:在Web页面(或其它类型的文档)中显示的信息在设计页面时是无效的,是基于动态数据的

l???????? 在这里,你可以在HTML(或其它要输出的文本)中加入一些特定指令,FreeMarker会在输出页面给最终用户时,用适当的数据替代这些代码

l???????? 下面是一个例子:

? Welcome!
? 

Welcome ${user}!

? 

Our latest product:

? ${latestProduct.name}!
? 

l???????? 这个例子是在简单的HTML中加入了一些由${…}包围的特定代码,这些特定代码是FreeMarker的指令,而包含FreeMarker的指令的文件就称为模板(Template

l???????? 至于userlatestProduct.urllatestProduct.name来自于数据模型(data model

l???????? 数据模型由程序员编程来创建,向模板提供变化的信息,这些信息来自于数据库、文件,甚至于在程序中直接生成

l???????? 模板设计者不关心数据从那儿来,只知道使用已经建立的数据模型

l???????? 下面是一个可能的数据模型:

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

l???????? 数据模型类似于计算机的文件系统,latestProduct可以看作是目录,而userurlname看作是文件,urlname文件位于latestProduct目录中(这只是一个比喻,实际并不存在)

l???????? FreeMarker将上面的数据模型合并到模板中,就创建了下面的输出:

? Welcome!
? 

Welcome Big Joe!

? 

Our latest product:

? green mouse!
? 

2)数据模型

l???????? 典型的数据模型是树型结构,可以任意复杂和深层次,如下面的例子:

(root)
? |
? +- animals
? |?? |
? |?? +- mouse
? |?? |?? |?? 
??|?? |?? +- size = "small"
? |?? |?? |?? 
??|?? |?? +- price = 50
? |?? |
? |?? +- elephant
? |?? |?? |?? 
??|?? |?? +- size = "large"
? |?? |?? |?? 
??|?? |?? +- price = 5000
? |?? |
? |?? +- python
? |?????? |?? 
??|?????? +- size = "medium"
? |?????? |?? 
??|?????? +- price = 4999
? |
? +- test = "It is a test"
? |
? +- whatnot
????? |
????? +- because = "don't know"

l???????? 类似于目录的变量称为hashes,包含保存下级变量的唯一的查询名字

l???????? 类似于文件的变量称为scalars,保存单值

l???????? scalars保存的值有两种类型:字符串(用引号括起,可以是单引号或双引号)和数字(不要用引号将数字括起,这会作为字符串处理)

l???????? scalars的访问从root开始,各部分用“.”分隔,如animals.mouse.price

l???????? 另外一种变量是sequences,和hashes类似,只是不使用变量名字,而使用数字索引,如下面的例子:

(root)
? |
? +- animals
? |?? |
? |?? +- (1st)
? |?? |?? |
? |?? |?? +- name = "mouse"
? |?? |?? |
? |?? |?? +- size = "small"
? |?? |?? |
? |?? |?? +- price = 50
? |?? |
? |?? +- (2nd)
? |?? |?? |
? |?? |?? +- name = "elephant"
? |?? |? ?|
? |?? |?? +- size = "large"
? |?? |?? |
? |?? |?? +- price = 5000
? |?? |
? |?? +- (3rd)
? |?????? |
? |?????? +- name = "python"
? |?????? |
? |?????? +- size = "medium"
? |?????? |
? |?????? +- price = 4999
? |
? +- whatnot
????? |
????? +- fruits
?? ???????|
????????? +- (1st) = "orange"
????????? |
????????? +- (2nd) = "banana"

l???????? 这种对scalars的访问使用索引,如animals[0].name

3)模板

l???????? FreeMarker模板中可以包括下面三种特定部分:

????????? ${…}:称为interpolationsFreeMarker会在输出时用实际值进行替代

????????? FTL标记(FreeMarker模板语言标记):类似于HTML标记,为了与HTML标记区分,用#开始(有些以@开始,在后面叙述)

????????? 注释:包含在<#---->(而不是<!--</span><span style="font-family: 宋体;">和</span><span lang="EN-US">-->)之间

l???????? 下面是一些使用指令的例子:

????????? if指令

<#if animals.python.price < animals.elephant.price>
? Pythons are cheaper than elephants today.
<#else>
? Pythons are not cheaper than elephants today.
</#if>? 

????????? list指令

We have these animals:

? 
NamePrice
? <#list animals as being>
? 
${being.name}${being.price} Euros
? </#list>
?

输出为:

We have these animals:

? 
NamePrice
? 
mouse50 Euros
? 
elephant5000 Euros
? 
python4999 Euros
?

????????? include指令

? Test page
? 

Test page

? 

Blah blah...

<#include "/copyright_footer.html">
? 

????????? 一起使用指令

We have these animals:

? 
NamePrice
? <#list animals as being>
? 
??? 
????? <#if being.size = "large"></#if>
????? ${being.name}
????? <#if being.size = "large"></#if>
??? 
${being.price} Euros
? </#list>
?

分享到:
评论

相关推荐

    FreeMarker概述

    FreeMarker概述、FreeMarker特性、FreeMarker应用指南

    freemarker概述

    ### FreeMarker概述与核心知识点详解 #### 一、FreeMarker简介 FreeMarker是一个非常流行的开源模板引擎,主要用于根据模板和数据生成文本输出。它是由Java编写而成,因此可以在任何支持Java运行环境的地方运行。...

    FreeMarker概述API

    FreeMarker的核心是基于模板(Template)的,这些模板是由非编程人员编写的,然后在运行时由FreeMarker引擎动态地合并数据模型来生成最终的输出。 FreeMarker的API主要包括以下几个关键部分: 1. **`Configuration...

    FreeMarker概述.pdf

    ### FreeMarker概述 #### 一、FreeMarker简介 FreeMarker是一个功能强大的模板引擎,主要用于根据提供的数据生成文本输出。该工具完全用Java编写,并且设计初衷是为了生成HTML Web页面,尤其是在MVC(Model-View-...

    FreeMarker概述2008

    FreeMarker的核心特性包括: 1. **通用目标**:FreeMarker能够生成各种文本格式,如HTML、XML、RTF等,并且可以通过自定义模板加载器从各种来源获取模板。 2. **强大的模板语言**:提供了丰富的指令,如`include`...

    FreeMarker

    ### FreeMarker 概述 FreeMarker 是一款模板引擎,它主要功能是基于模板和变动的数据来生成输出文本,这些文本可以是 HTML 网页、电子邮件、配置文件、源代码等。这款工具并非面向最终用户,而是作为一个 Java 类库...

    freemarker-2.3.22

    在这个版本中,它可能概述了如何在项目中引入Freemarker 2.3.22,以及如何运行示例或查看API文档。 `NOTICE.txt`文件则通常包含项目的版权信息、许可声明和其他法律相关的细节,帮助开发者了解使用此软件的法律限制...

    FreeMarker实例教程,手把手教你FreeMarker的方方面面

    - **基本内容**:概述了配置FreeMarker的基本步骤。 - **共享变量**:介绍了如何在多个模板间共享变量。 - **配置信息**:描述了如何设置和读取FreeMarker的配置选项。 - **模板加载**:讲解了模板文件的加载机制。 ...

    FreeMarker模板设计指南

    FreeMarker概述 FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写 FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序 虽然FreeMarker具有一些编程的能力...

    FreeMarker中文版word文档

    ### FreeMarker概述与核心知识点 #### 一、FreeMarker简介 FreeMarker是一个强大的模板引擎,主要用于Web应用程序中生成动态HTML页面以及其他格式的文档。它支持多种编程语言如Java、Python等,并且可以在不同的...

    freemarker的分页功能

    标题与描述概述的知识点主要集中在Freemarker模板引擎在实现分页功能时的应用,特别是当后端数据库为MySQL的情况下。Freemarker是一个用于生成动态文本的模板引擎,它被广泛应用于Web开发中,用于将数据模型转换成...

    FreeMarker设计指南+概述(doc)

    综上所述,"FreeMarker设计指南+概述.doc"提供了全面的学习材料,无论是对于初学者还是有经验的开发者,都能从中获取到宝贵的指导。通过深入学习和实践,你可以充分利用FreeMarker的强大功能,为你的Web应用创建灵活...

    超强freemarker使用总结,有示例有讲解,可做快速查询手册!!

    #### 一、Freemarker 概述 Freemarker 是一种用于生成动态页面的模板引擎。它不依赖任何 Web 容器,可以在任何 Java 应用程序中使用。Freemarker 的核心优势在于其简单易学且功能强大,能够很好地满足 Web 开发中的...

    FreeMarker整理

    #### 一、FreeMarker概述与组成部分 FreeMarker是一种强大的模板引擎,主要用于生成动态HTML页面或其他格式的文档。它通过结合预定义的数据模型与模板文件来生成最终输出。FreeMarker模板文件相对简单直观,其结构...

    freemarker 中午手册

    #### 一、Freemarker 概述 - **定义与功能**:Freemarker 是一款用纯 Java 编写的模板引擎,它主要用于根据模板生成文本输出,如 HTML 网页、XML 文件、电子邮件等。其核心优势在于能够高效地将动态数据转化为静态...

    FreeMarker模板基本语法

    #### 一、FreeMarker概述与基本用法 **FreeMarker**是一种强大的、基于Java的模板引擎,主要用于动态生成HTML页面,但也支持其他类型的文本格式(如XML、JavaScript、电子邮件等)。它通过将数据模型与表现层分离的...

    freemarker-2.3.19教程

    #### FreeMarker 概述 - **定义**: FreeMarker 是一个用纯 Java 编写的模板引擎,它主要用于基于模板生成文本输出。 - **用途**: 主要设计用于生成 HTML Web 页面,尤其是在 MVC (Model-View-Controller) 模式的应用...

Global site tag (gtag.js) - Google Analytics