在工作的过程中遇到了.ftl文件。打开发现里面是一些类似于html的代码,非常好奇这是一种什么样的文件,于是去网上搜了一下,了解到.ftl是Freemarker模板的文件后缀名。将问题转移到了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>

这个模板存放在Webserver上,当訪问这个页面时, Freemarker将介入运行,然后动态转换模板,用最新的数据内容替换模板中${...}的部分。

能够发现的是。文件里并未指明怎样取到诸如${...}的值,这就是Freemarker的特点。由于作为MVC框架视图层的组件,它的重要思想就是表现逻辑和业务逻辑相分离。

它不关心怎么取到数据,它默认数据已经取到了,这些取数据的操作将由程序猿编写,将由程序语言诸如Java来实现。 Freemarker模板所用的数据被包装成data-model
数据模型。所以说,(HTML)模板 + 数据模型 = (Freemarker)输出

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


这个图来自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文件,当client訪问页面时,Freemarker要发送HTML代码至client浏览器显示,假设要让页面动起来,就要在HTML中放置能被Freemarker所解析的特殊部分。
${...}:
                     interpolations插值 前面介绍过了
FTL
tags标签  :    和HTML标签类似。可是Freemarker的指令不会输出出来的东西。这些标签的使用一般以符号#开头(用户自己定义的FTL标签                                         使用@符号来取代#)
Comments凝视
:  Freemarker的凝视和HTML的凝视相似,可是用<#--和-->
directives指令
 :   FTL标签(关系类似于HTML标签table标签<table>和</table>与table元素的关系)
指令介绍:
if指令:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

假设if推断user不是Big
Joe将跳过<#if condition>和</#if>标签间的内容
其它參考代码:

list指令:
列表遍历集合的内容。演示样例代码:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

输出的结果将会是这种:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

list指令的一般格式为:
<#list
sequence as loopVariable>repeatThis</#list>
include指令:
使用include指令,能够在当前的模板中插入其它文件的内容。
样例:在一些页面中显示版权声明的信息。

能够创建一个文件单独包括版权声明copyright_footer.html,在须要的地方插入。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

include指令插入:

输出内容为:

联合使用指令:(样例将遍历动物合集,使用大号字体打印大型动物的名字)


处理不存在的变量:

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

和默认值,比方:


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

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


freemarker学习#1的更多相关文章

  1. FreeMarker 学习

    一.FreeMarker FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页.电子邮件.配置文件.源代码等)的通用工具. 它不是面向最终用户的,而是 ...

  2. Freemarker学习中遇到的问题

    在网上找到了尚学堂的视频,同时有书和源码等资料.但是在跟着练习的过程中,代码运行报了错: 2015-7-20 22:26:40 freemarker.log.JDK14LoggerFactory$JD ...

  3. FreeMarker学习(宏<#macro>的使用)

    原文链接:https://my.oschina.net/weiweiblog/blog/506301?p=1 用户定义指令-使用@符合来调用  有两种不同的类型:Macro(宏)和transform( ...

  4. freemarker学习

    链接: http://swiftlet.net/archives/category/freemarker

  5. FreeMarker学习教程

    copy自http://demojava.iteye.com/blog/800204 以下内容全部是网上收集: FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主 ...

  6. freemarker学习 (servlet + freemarker -> Struts2+freemarker -> springMVC+freemarker)

    什么是freemarker? freemarker类似于jsp,但不是jsp!怎么说呢?freemarker文件后缀是.ftl,它不像jsp本质是servlet,它将构建模板.解析模板.使用模板分离开 ...

  7. freemarker学习笔记

    在模板中定义的变量有三种类型: 引用 1:plain变量:可以在模板的任何地方访问,包括使用include指令插入的模板,使用assign指令创建和替换. 2:局部变量:在宏定义体中有效,使用loca ...

  8. Rhythmk 一步一步学 JAVA (10): Freemarker 学习 1 - 入门

    FreeMarker 笔记: 1. 注释:   <#-- 注释内容 -#> 2.<#if condition> content1 <#else> content2 ...

  9. FreeMarker学习系列之一

    一. 基本概念 ${...}: FreeMarker将会输出真实的值来替换大括号内的表达式,这样的表达式插值 FTL 标签 (FreeMarker模板的语言标签): FTL标签和HTML标签有一些相似 ...

随机推荐

  1. android版本号始终为1

    之前用Eclipse里时,版本号是检查是做如下 <manifest xmlns:android="http://schemas.android.com/apk/res/android& ...

  2. android sdk屏幕截图工具

    调用android sdk中的工具,在开发板上截图. 使用usb线连接android设备,打开adb调试. 进入目录 sdk/tools/ 运行 traceview.bat 运行 uiautomato ...

  3. DTD与XML Schema都是XML文档。(选择1项)

    DTD与XML Schema都是XML文档.(选择1项) A.正确 B.不正确 解答:DTD不是XML文件, schema是XML文档

  4. java-----四种引用

    java的四种引用,强弱软虚,用到的场景 标签: java的引用 强弱软虚 2016-05-11 22:59 1237人阅读 评论(0) 收藏 举报 1.强引用(StrongReference) 强引 ...

  5. PHP cURL库函数抓取页面内容

    目录 1 为什么要用cURL? 2 启用cURL 3 基本结构 4 检查错误 5 获取信息 6 基于浏览器的重定向 7 用POST方法发送数据 8 文件上传 9 cURL批处理(multi cURL) ...

  6. unity发射弓箭轨迹的实现

    无论是愤怒的小鸟,还是弓箭发射功能,亦或者模拟炮弹受重力影响等抛物线轨迹,都可以使用本文的方法,模拟绝对真实. 和往常一样,先说原理.就是抛物运动,在垂直方向上做加速度运动,在水平方向上,做匀速运动. ...

  7. C++之强制类型转换

     C++ Code  12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 ...

  8. Max_connect_errors – MySQL性能参数详解

    转载http://blog.csdn.net/wulantian/article/details/9670957 ax_connect_errors是一个MySQL中与安全有关的计数器值,它负责阻止过 ...

  9. kindeditor在Java项目中的应用以及图片上传配置

    在官网下载Kindededitor的开发包   在项目中javaweb项目中导入kindeditor必须要使用的Jar包(用于文件上传,除非你的富文本编辑器不使用图片上传)jar包可以在官网的开发包中 ...

  10. angular 2+ innerHTML属性中内联样式丢失

    通过属性绑定的innerHTML,把字符串里面的html解析 解析是没问题的,但一些内联样式会丢失掉 为了不丢掉样式,需要自定义一个管道来解决这个问题 html.pipe.ts import {Pip ...