freemarker的初步学习

在工作的过程中遇到了.ftl文件,打开发现里面是一些类似于html的代码,很好奇这是一种什么样的文件,于是去网上搜了一下,了解到.ftlFreemarker模板的文件后缀名,将问题转移到了Freemarker模板是一个什么东西。没办法,继续到网上寻找相关资料。以下内容来源于网络,感谢!!

 1、Freemarker是什么?

百度百科说:Freemarker是一款模板引擎,我是小白,很遗憾,我也不知道模板引擎是个什么东西,不怕,继续百度模板引擎,百度百科继续说,模板引擎(特指用于web开发的模板引擎)是为了使用户界面与业务数据分离而产生的,可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的Html文档。个人理解就是:Freemarker是一个生成标准HTML文档的模板。结合大牛的博客:”Freemarker其实是一种比较简单的网页展示技术,说白了就是网页模板和数据模型的结合体。“工作方式是:“网页模板里面嵌入了数据模型中的数据、Freemarker自定义流程控制语言、Freemarker自定义的操作函数等等,在装载网页的时候,Freemarker模板自动从数据模型中提取数据,并解释整个网页为我们熟知的HTML页面。”好的,基本和我们理解的差不多。知道了Freemarker是什么,下面就可以简单了解一下Freemarker了,并学习学习。

2、Freemarker基本知识

首先,Freemarker不是Web开发的应用程序框架,它是一个适用于Web应用程序框架中的组件,而且,它并不知道HTTP协议或Java servlet的存在,仅仅用来生成文本内容,它作为MVC框架视图层的组件,是为了给诸如Struts这样的Model2应用框架提供解决方案。

   Freemarker的形式是 模板 + 数据模型 = 输出  即Freemarker在html文件中插入一些自己的指令元素,可以使静态的HTML页面有一些动态效果,源代码如下

HTML页面:

<html>
<head>
    <title>Welcom!</title>
</head>
<body>
     <h1>Welcome Big Joe!</h1>
     <p>Our latest product:
     <a href="products/greenmouse.html">green mouse</a>!
</body>
</html>
       Freemarker修改后的代码:

<html>
<head>
    <title>Welcom!</title>
</head>
<body>
     <h1>Welcome ${user}!</h1>
     <p>Our latest product:
     <a href="${latestProduct.url}">${latestProduct.name}</a>!
</body>
</html>
这个模板存放在Web服务器上,当访问这个页面时,  Freemarker将介入执行,然后动态转换模板,用最新的数据内容替换模板中${...}的部分。可以发现的是,文件中并未指明如何取到诸如${...}的值,这就是Freemarker的特点。因为作为MVC框架视图层的组件,它的重要思想就是表现逻辑和业务逻辑相分离。它不关心怎么取到数据,它默认数据已经取到了,这些取数据的操作将由程序员编写,将由程序语言诸如Java来实现。 Freemarker模板所用的数据被包装成data-model 数据模型,所以说,(HTML)模板 + 数据模型 = (Freemarker)输出

另外:数据模型的基本结构是树状的,在 Freemarker手册中将这种形式比喻为:计算机文件系统。我个人理解的是:就像一个类,它有属性一样,比如:latestProduct具有url和name两个属性。

freemarker的初步学习_第1张图片
这个图来自 Freemarker中文手册,文章介绍:该图中变量扮演目录的角色(根root,animal,mouse,elephant,Python,whatnot)被称为hash哈希表。哈希表通过可查找的名称(例如:“animal”,“mouse","price")来访问存储的其他变量。
下面的东西感觉比较重要,是介绍如何使用这些变量的,用蓝色字体来写:
                  仅存储单值的变量(图中size,price,text和because)称为scalars标量(包含的类型有:字符串、数字、日期/时间、布尔值)
                   如果要在模板中使用子变量,那应该从根root开始指定它的路径,每级之间用点来分隔。比如访问price,写成:animals.mouse.price
      上面的图还有另外一种形式:
          
         在上面这幅图中,诸如animal,whatnot.fruits并未存储变量的名称,而是按顺序存储子变量,可以使用数字索引来访问这些子变量。这种叫做sequences序列
怎么使用: 可以使用数组的方括号方式访问一个序列的子变量,注意,索引从0开始。如果要获得第一个动物的名字,代码为:animals[0].name

*************************************************************华丽丽的分割线**************************************************************************************************

Freemarker基本知识第二部分:
模板介绍:
最简单的模板是HTML文件,当客户端访问页面时,Freemarker要发送HTML代码至客户端浏览器显示,如果要让页面动起来,就要在HTML中放置能被Freemarker所解析的特殊部分。
${...}:                      interpolations插值 前面介绍过了
FTL tags标签  :    和HTML标签类似,但是Freemarker的指令不会输出出来的东西。这些标签的使用一般以符号#开头(用户自定义的FTL标签                                         使用@符号来代替#)
Comments注释 :  Freemarker的注释和HTML的注释相似,但是用<#--和-->
directives指令  :   FTL标签(关系类似于HTML标签table标签<table>和</table>与table元素的关系)
指令介绍:
if指令:
freemarker的初步学习_第2张图片
如果if判断user不是Big Joe将跳过<#if condition>和</#if>标签间的内容
其他参考代码:
freemarker的初步学习_第3张图片
list指令:
列表遍历集合的内容。示例代码:

输出的结果将会是这样的:

list指令的一般格式为:
<#list sequence as loopVariable>repeatThis</#list>
include指令:
使用include指令,可以在当前的模板中插入其他文件的内容。
例子:在一些页面中显示版权声明的信息。可以创建一个文件单独包含版权声明copyright_footer.html,在需要的地方插入。

include指令插入:

输出内容为:
freemarker的初步学习_第4张图片
联合使用指令:(例子将遍历动物合集,使用大号字体打印大型动物的名字)
freemarker的初步学习_第5张图片

处理不存在的变量:

Freemarker不能容忍引用不存在的变量,除非明确地告诉它当变量不存在时如何处理。(注意:对于不存在的变量和一个值为null的变量Freemarker都是不能容忍的)有两种处理方法:
一、可以指定默认值
变量名后面跟着!和默认值,比如:

如果user丢失,将默认使用Anonymous
二、提前提供丢失的解决方法,比如:

在变量名后面放置??来询问Freemarker一个变量是否存在,如果不存在,将忽略以上整段代码

freemarker的初步学习_第6张图片

你可能感兴趣的:(freemarker)