Freemarker 简介

  1、动态网页和静态网页差异

  在进入主题之前我先介绍一下什么是动态网页,动态网页是指跟静态网页相对应的一种网页编程技术。静态网页,随着HTML代码的生成,页面的内容和显示效果就不会再发生变化(除非你修改页面代码)。而动态网页则不然,页面代码虽然没有发生变化,但是显示的内容却是可以随着时间、环境或者数据库操作的结果而发生相应的变化。简而言之,动态网页是基本的HTML语法规范与java、VB、VC等高级程序设计语言、数据库编程等多种技术的融合,以实现对网站内容和风格的高效、动态和交互式的管理。

  通过前面的介绍我们可以得出动态网页和静态网页的优缺点(这里我们只考虑网站性能方面的相关问题,信息安全等多方面问题不做赘述):

  1)静态网页:

  a、静态网页的内容稳定,页面加载速度快。

  b、静态网页的没有数据库支持,在网站制作和维护方面的工作量较大。

  c、静态网页的交互性差,有很大的局限性。

  2)动态网页:

  a、交互性好。

  b、动态网页的信息都需要从数据库中读取,每打开一个一面就需要去获取一次数据库,如果访问人数很多,也就会对服务器增加很大的荷载,从而影响这个网站的运行速度。

  通过上面的比较我们不难看出,要提升网站的性能,我们只要把动态网页做成静态网页就会在运行速度方面有显著的提升,但是问题出来了,如果将所有页面都做成静态页面显然是不切实际的。有什么办法能让我们的网站即能有动态网页的交互性,又有静态网页的加载速度呢?FreeMarker便能实现这样的需求:实现动态网页静态化。

  2、FreeMarker原理

  FreeMarker是一个基于Java的开发包和类库的一种将模板和数据进行整合并输出文本的通用工具,FreeMarker实现页面静态化的原理是:将页面中所需要的样式写入到FreeMarker模板文件中,然后将页面所需要的数据进行动态绑定并放入到Map中,然后通过FreeMarker的模板解析类process()方法完成静态页面的生成。其工作原理如图2-1所示。


▲图2-1 FreeMarker工作原理图

  3、FreeMarker表达式

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

  1)直接指定值

  例如:${“zhangsan”}

  2)输出变量值

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

  3)字符串操作

  a、字符串的连接,字符串的连接可以直接使用云算符“+”来连接字符串也可以使用${..}(或#{..})在字符串常量部分插入表达式的值,从而完成字符串连接。

  b、字符串的截取,${book[1..4]}

  4)集合连接运算符,这里所说的集合连接运算是将两个集合连接成一个新的集合,连接集合的运算符是“+”,例如:

  5)Map连接运算符,Map对象的连接运算也是将两个Map对象连接成一个新的Map对象,Map对象的连接运算符是+。如果两个Map对象具有相同的 key,则后加入Map里的key所对应的value替代原来key所对应的value

  6)算术运算符,FreeMarker表达式中完全支持算术运算。FreeMarker支持的算术运算符包括: +,-,*,/,%

  7)比较运算符,FreeMarker表达式中支持的比较运算符有如下几个

  a、=(或者==):判断两个值是否相等.

  b、!=:判断两个值是否不相等

  c、 >(或者gt):判断坐标值是否大于右边值

  d、 >=(或者gte):判断坐标值是否大于等于右边值

  e、 <(或者lt):判断左边值是否小于右边值

  f、 <=(或者lte):判断左边值是否小于等于右边值

  8)逻辑运算符,FreeMarker中的逻辑运算符有如下几个:

  a、逻辑与:&&

  b、逻辑或:||

  c、逻辑非:!

  9)内建函数

  FreeMarker提供了一些内建函数用来转换输出,可以在任何变量后紧跟?,?后紧跟内建函数,就可以通过内建函数来转换输出变量,例如:${test?upper_case?html}这里就是将test字符串转换为大写并进行HTML编码。

  10)空值处理运算符

  FreeMarker对空值的处理非常严格,FreeMarker的变量必须有值,如果存在没有赋值的变量就会抛出异常,为了处理缺失变量FreeMarker提供了两个运算符:“!”和“??”,其中“!”用于指定缺失变量的默认值,“??”用来判断某个变量是否存在。

  4、FreeMarker的常用指令

  1)if指令

  使用if指令可以有条件的跳过模板的一部分,和程序语言中的if相似,例如你想显示某个用户是否成年可以这样写:

  2)switch、case、default、break指令

  FreeMarker中使用switch、case、default、break指令和常用的程序设计语言中的一样。例如:

  虽然FreeMarker提供了switch指令,但它并不推荐使用switch指令来控制也输出,而是推荐使用FreeMarker的if..elseif..else 指令来替代它。

  3)list指令

  当在HTML中需要用列表遍历集合的内容时,list就显得尤为重要,例如当我们需要遍历一个用户集合时可以这样写:

  4)include 指令

  include指令的作用类似于JSP的包含指令,用于包含指定页,include指令的语法格式如下:

  <#include filename [options]>

  在上面的语法格式中,两个参数的解释如下

  a)filename:该参数指定被包含的模板文件

  b)options:该参数可以省略,指定包含时的选项,包含encoding和parse两个选项,encoding指定包含页面时所使用的解码集,而parse指定被包含是否作为FTL文件来解析。如果省略了parse选项值,则该选项值默认是true。

  5)assign指令

  通过assign指令可以创建一个变量,或替换一个已存在的变量,例如:

  <#assign name=”zhangsan”>

  三、FreeMarker实现网页静态化

  上面我简单介绍了FreeMarker的基本用法,下面我将以具体例子采用Freemarker实现网页静态化的功能。

  1)新建一个Maven项目,在pom.xml文件中新增FreeMarker的jar包,

  2)新建FreemarkerUtil工具类,其中包含了通过标准输出流输出模板的结果的方法和输出到文件中的方法。Freemarker是通过template.Configuration这个对象对模板进行加载的(它也处理创建和缓存预解析模板的工作),然后我们通过getTemplate方法获得你想要的模板,有一点要记住template.Configuration在你整个应用必须保证唯一实例。

  3)新建User实体类,用户属性包含用户主键、用户年龄、邮箱,该实体类用于模拟从数据库中查询出数据。

  4)新建模板文件01.ftl,通过上面的介绍知道FreeMarker是一种基于模板的、用来生成输出文本的通用工具,所以我们必须要定制符合自己业务的模板出来,然后将需要动态加载的数据通过FreeMarker的语法规范书写生成静态HTML的模板文件,具体的语法规范在上前面已经详细介绍。

  5)新建Junit测试类TestFreemarker,用假数据模拟从数据库中查询数据并通过FreeMarker将模板文件和数据结合生成静态的HTML文件。

  6) 通过以上步骤便成功的完成了一个通过FreeMarker生成静态HTML文件,生成的HTML文件内容如图3-1所示。


▲图3-1

  通过以上步骤便成功的实现了对一个需要从数据库中查询数据的动态页面的静态化处理,当我们每次更新了数据库中的相应信息以后,我们便可以重新执行这个方法,将这个页面重新静态化,当我们每次访问这个网页的时候便不会每一次都去数据库中查询数据了,而是访问的一个已经一次性生成了的静态页面,这也就达到了提高网站运行速度的目标。

原文地址:https://www.cnblogs.com/panchanggui/p/9346625.html

时间: 2024-10-03 09:59:51

Freemarker 简介的相关文章

Spring MVC+FreeMarker简介

最近做项目,刚接触到SpringMVC与FreeMarker框架,就简单介绍一下自己的理解,不正确的地方请大家指教!! 1.Spring MVC工作原理: 用户发送请求--->前端服务器去找相对应的Cotroller--->在Controller中调用相应的接口,并将请求结果存放到model中---->将model中的值取出来渲染到前端界面上---->这样就产生了用户可以看到的响应界面. 2.FreeMarker 转载地址:http://www.oschina.net/p/free

FreeMarker简介

什么是 FreeMarker? FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具. 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件. 模板编写为FreeMarker Template Language (FTL).它是简单的,专用的语言, 不是 像PHP那样成熟的编程语言. 那就意味着要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已

简介JSP与FreeMarker及Volicity区别

FreeMarker FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页.电子邮件.配置文件.源代码等)的通用工具. 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件. FreeMarker是免费的,基于Apache许可证2.0版本发布.其模板编写为FreeMarker Template Language(FTL),属于简单.专用的语言.需要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板

[项目构建 九]babasport 页面静态化技术Freemarker技术的介绍及使用实例.

一.FreeMarker简介 1.动态网页和静态网页差异 在进入主题之前我先介绍一下什么是动态网页,动态网页是指跟静态网页相对应的一种网页编程技术.静态网页,随着HTML代码的生成,页面的内容和显示效 果就不会再发生变化(除非你修改页面代码).而动态网页则不然,页面代码虽然没有发生变化,但是显示的内容却是可以随着时间.环境或者数据库操作的结果而 发生相应的变化.简而言之,动态网页是基本的HTML语法规范与java.VB.VC等高级程序设计语言.数据库编程等多种技术的融合,以实现对网站内容 和风格

jsp、freemarker、velocity的比较(转)

[本文摘自http://suliuyes.iteye.com/blog/1250444,待整理] freemarker  优点:  1.不能编写java代码,可以实现严格的mvc分离  2.性能非常不错  3.对jsp标签支持良好  4.内置大量常用功能,使用非常方便  5.宏定义(类似jsp标签)非常方便  6.使用表达式语言  缺点:  1.不是官方标准  2.用户群体和第三方标签库没有jsp多 性能:velocity应该是最好的,其次是jsp,普通的页面freemarker性能最差,但是在

Jsp和freemarker&amp;nbsp;的优劣

freemarker 优点: 1.不能编写java代码,可以实现严格的mvc分离 2.性能非常不错 3.对jsp标签支持良好 4.内置大量常用功能,使用非常方便 5.宏定义(类似jsp标签)非常方便 6.使用表达式语言 缺点: 1.不是官方标准 2.用户群体和第三方标签库没有jsp多 性能:velocity应该是最好的,其次是jsp,普通的页面freemarker性能最差,但是在复杂页面上(包含大量判断.日期金额格式化)的页面上,freemarker的性能比使用tag和el的jsp好. jsp是

Spring MVC 学习总结(七)——FreeMarker模板引擎与动态页面静态化

模板引擎可以让程序实现界面与数据分离,业务代码与逻辑代码的分离,这就提升了开发效率,良好的设计也使得代码复用变得更加容易.一般的模板引擎都包含一个模板解析器和一套标记语言,好的模板引擎有简洁的语法规则.强大的功能.高效的渲染效率.详尽的帮助说明与不断的更新与维护.常见的前端模板引擎有: 常用的java后台模板引擎:jsp.FreeMarker.Velocity等. 请不要迷恋速度,为了推广的测试可能是片面的,好的模板引擎经得起时间考验,建议大家选择成熟的.常用的模板引擎.另外不管前后端的模板引擎

velocity freemarker比较

相比较 FreeMarker 而言,Velocity 更加简单.轻量级,但它的功能却没有 FreeMarker 那么强大. 对于大部分的应用来说,使用 FreeMarker 比 Velocity 更简单,因为 Velocity 还必须编写一些自定义的toolbox类以及一遍遍重复的编写一些比较通用的模版代码,因此也就丧失了刚开始开发时更多的宝贵时间.另外使用工具类和变通的方法在模版引擎中似乎不是一个非常有效的做法.同时,Velocity 的做法使得在Velocity的模版中大量的跟 Java 对

页面静态化技术velocity与freemarker比较

相比较 FreeMarker 而言,Velocity 更加简单.轻量级,但它的功能却没有 FreeMarker 那么强大. 对于大部分的应用来说,使用 FreeMarker 比 Velocity 更简单,因为 Velocity 还必须编写一些自定义的toolbox类以及一遍遍重复的编写一些比较通用的模版代码,因此也就丧失了刚开始开发时更多的宝贵时间.另外使用工具类和变通的方法在模版引擎中似乎不是一个非常有效的做法.同时,Velocity 的做法使得在Velocity的模版中大量的跟 Java 对