FreeMarker简介

来源:互联网 发布:湖南软件职业学院招聘 编辑:程序博客网 时间:2024/06/05 11:34

转自:http://blog.csdn.net/wyswlp/article/details/9421325


Overview of FreeMarker workflow

一、 FreeMarker简介
FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。
所谓模板,就是一份已经写好了基本内容,有着固定格式的文档,其中空出或者用占位符标识的内容,由使用者来填充,不同的使用者给出的数据是不同的。在模板中的占位符,在模板运行时,由模板引擎来解析模板,并采用动态数据替换占位符部分的内容。
FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 文等。


二、 FreeMarker的优点和缺点
(一) FreeMarker的优点
1.使用FreeMarker的优点之一,可以彻底的分离表现层和业务逻辑。
使用JSP 开发过程中在页面中大量的存在业务逻辑的代码,使得页面内容凌乱,在后期大量的修改维护过程中就变得非常困难。
FreeMarker根本不支持Java脚本代码。
FreeMarker的原理就是:模板+数据模型=输出 ,模板只负责数据在页面中的表现,不涉及任何的逻辑代码,而所有的逻辑都是由数据模型来处理的。用户最终看到的输出是模板和数据模型合并后创建的。
      
2.使用FreeMarker的优点之二,可以提高开发效率。
在我们以往的开发中,使用的都是JSP 页面来展示数据的,即所谓的表现层。我们都知道,JSP在第一次执行的时候需要转换成Servlet类,开发阶段进行功能调适时,需要频繁的修改JSP,每次修改都要编译和转换,那么试想一天中我们浪费在程序编译的时间有多少。相对于JSP来说,FreeMarker模板技术不存在编译和转换的问题,所以就不会存在上述问题。而且开发过程中,我们在不必在等待界面设计开发人员完成页面原形后,我们再来开发程序。

3.使用FreeMarker的优点之三,使得开发过程中的人员分工更加明确。
以往用
JSP展现数据时,作为程序员的我们,并不熟悉界面设计技术,反之界面开发人员,也并不熟悉程序语言。对两者而言,交替性的工作本身就有难度。有时候稍有不慎,可能会将某个页面元素删除或去掉了某个程序符号,使得页面走样或程序错误,这样就需要双方相互沟通协作,解决出现的问题。有时候因为项目中的时间,任务量等因素的存在,可能这个工作就由一个人来完成,这样就可能加大某一方开发人员的工作量。
使用FreeMarker后,作为界面开发人员,只专心创建HTML文件、图像以及Web页面的其他可视化方面,不用理会数据;而程序开发人员则专注于系统实现,负责为页面准备要显示的数据。


(二)FreeMarker的缺点
1.使用FreeMarker的缺点之一,应用FreeMarker模板技术,在修改模板后,可能会看到已经过期的数据。如:生成静态的HTML页面后,如果一旦模板改变,而没有及时更新模板生成的HTML页面的话,用户看到的就是过期的数据。
2.使用FreeMarker的缺点之二,FreeMarker模板技术在应用过程中,FreeMarker中的变量必须要赋值,如果不赋值,那么就会抛出异常。想避免错误就要应用if/elseif/else 指令进行判段,如果对每一个变量都判断的话,那么则反而增加了编程的麻烦。
3.使用FreeMarker的缺点之三,FreeMarker的map限定key必须是string,其他数据类型无法操作
4.使用FreeMarker的缺点之四,FreeMarker不支持集群应用。为了编成的方便性,把序列化的东西都放到了Session中,如
Session,request等,在开发的过程中确实方便,但如果将应用放到集群中,就会出现错误。


================================================================


转自:http://blog.csdn.net/mr_von/article/details/3051668


FreeMarker是一个模版引擎,一个基于模版生成文本输出的通用工具,使用纯Java编写。FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序。FreeMarker有一些编成能力,但通常情况下用java程序准备要显示的数据,由FreeMarker生成页面,通过模版显示准备的数据。FreeMarker不是一个Web应用框架,而更适合作为一个Web应用框架的一个组件。FreeMarker与容器无关,它并不知道HTTP或者Servlet,FreeMarker同样可以用于非Web应用环境。FreeMarker更适合Model2的视图组件,同样可以在模版中使用JSP标记库。 

FreeMarker的通用目标:能够生成各种文本,HTML、XML、RTF、Java源代码等等;易于嵌入,轻量级、不需要Servlet环境;插件式的模版载入器,可以在任何源载入,如本地文件、数据库等等;按需生成文本,保存到本地文件、作为Email发送、从Web应用程序发送它返回到Web浏览器。 

强大的模版语言:所有常用的指令,include、if/elseif/else、循环结构。在模板中创建和改变变量。可以使用复杂的表达式来使用值。命名的宏,可以具有位置参数和嵌套内容。名字空间有助于建立和维护可重用的宏库,或者将一个大的工程分为若干个模块,而不必担心命名的冲突。输出转换块,在嵌套模版片断生成输出时,转换HTML转义、压缩、语法高亮等等。。 

通用的数据模型:FreeMarker不是直接反映到java对象,java对象通过插件式封装,以变量的方式在模版中展示。使用抽象的方式表示对象,使其不受技术细节的打扰。 

 在模板语言中内建处理典型Web 相关任务(如HTML 转义)的结构 
 能够集成到Model2Web 应用框架中作为JSP 的替代 
 支持JSP 标记库 
 为MVC 模式设计:分离可视化设计和应用程序逻辑;分离页面设计员和程序员 

5、智能的国际化和本地化 
 字符集智能化(内部使用UNICODE) 
 数字格式本地化敏感 
 日期和时间格式本地化敏感 
 非US 字符集可以用作标识(如变量名) 
 多种不同语言的相同模板 

6、强大的XML 处理能力 
 <#recurse> 和<#visit>指令(2.3 版本)用于递归遍历XML 树 
 在模板中清楚和直觉的访问XML 对象模型 

FreeMarker是一个Java模版语言,它是 JSP 的绝佳替代方案. FreeMarker在你的action result可能需要在Servlet容器环境以外被载入的情况下是理想选择. 例如,如果你希望在你的应用程序中支持plugins,你可能会乐意使用Freemarker,因为那样的话plugins可以支持将所有的action class和view都打包到一个从classloader进行装载的jar文件里面. 
关于FreeMarker的更多信息,请访问FreeMarker网站. 

FreeMarker与Velocity非常相似, 它们都是可以在Servlet容器外使用的模版语言. WebWork小组更推荐FreeMarker, 而不是Velocity, 这是因为FreeMarker提供了更好的错误报告, 支持JSP标签, 稍多的功能. 当然, 这两种技术都是代替JSP的很好方案. 


【yasi】

对于“使用FreeMarker来生成html前台页面”的情形,一种主流的做法是:

编写.ftl文件(FreeMarker模板文件,注意,它含有html语句,但不是最终的html文件)和描述数据模型的Java代码。前者定义页面样式,并且在要填入数据的地方加入FreeMarker语法的元素。后者定义前者要用到的数据结构和内容,并通过FreeMarker函数将二者(页面模板和数据模型)绑定,最终输出成html文件。


这样做的好处是:

页面样式的代码和数据模型的代码相隔离,层次清晰,便于阅读和维护。


FreeMarker中文版手册下载


原创粉丝点击