首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java模板发动机Freemarker

2012-12-20 
java模板引擎FreemarkerFreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写Fre

java模板引擎Freemarker

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

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

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

java模板发动机Freemarker

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

FreeMarker与容器无关,因为它并不知道HTTP或Servlet;FreeMarker同样可以应用于非Web应用程序环境

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

FreeMarker是免费的

而且你还可以通过Eclipse的插件来编辑FreeMarker,经过验证,FreeMarker 最好的 Eclipse 编辑插件是 JBoss Tools。

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

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

开源论坛 JForum 就是使用了 FreeMarker 做为页面模板。

copy form http://www.oschina.net/p/freemarker/

收集优点:

taglib、freemarker 、jsf、Velocity 偶都用过,最后还是觉得frremarker用着最顺心,下面我就说说个人比较喜欢的优点:
1.freemarker 是一个干净轻量的模板引擎,源代码结构也很清晰.
你可以直接写一个java main方法来调用它,我的代码生成器就是这么做的.
2.freemarker 写出来的页面一般都是xml格式友好的,也就是说你可以写出很规范的xhtml,而且还可以直接使用一些xml的代码格式化工具直接美化.而且很容易发现其中缺少或者嵌套错误的tag
3. 个人觉得freemarker 和taglib,jsf至少在使用层面上很像,但是freemarker 的macro容易写,几行代码就搞定了,taglib和jsf需要写一堆java文件和tld文件,繁琐得很
4.freemarker 不能直接调用java对象的method. 这点有些人认为这是个缺点,但是我不这样认为. 个人觉得对于一个view层的东西来说,你要做的就是把view展现好就行了,不要再view中调用业务方法. 以前在公司做产品和后来做项目时就一再和手下的coder强调这点,但是因为种种原因,大家都还是会偷懒,直接在view中调用.用了fm后就不一样了, 现在你想在view中调用业务方法,那么你需要绕n个圈才能做到,还不如直接按照标准的mvc来做.
5.freemarker 内置了很多web编程中很常用的方法. 例如js_string ,html_string, ${lastUpdated?string.short}, ${lastUpdated?string("yyyy-MM-dd HH:mm:ss zzzz")} 这些东西虽然都很小,但是胜在常用啊,而且用起来很方便
6. eclipse的插件很好用,可以代码提示自动完成. 当然现在只有jboss tools下的那个插件.不过那个插件开发基本停止了,而且维护人员特别官僚,我给他们报了好几个bug,而且还提供了对应的修改代码,结果他们非要我给 他们提供patch文件,而且还要写对应的单元测试代码. 偶滴神啊,我只是写web的,eclipse的那套东西实在是不熟悉啊.
7. fm的macro的参数可以设置缺省值, 用起来很方便.

=========================http://yesmeshtu2008-163-com.javaeye.com/blog/505724

用FreeMarker有写脚本的感觉,改点什么一刷新就出来了,自身带的函数、表达式及指令非常周全,实在不满足需要时,只要写个macro就OK了。
我现在还把一些常用的,又不值得放到数据库中的分类信息用assign定义到util.ftl中了,可以很方便的使用。
比如:
<#-- 字形 -->
<#assign fontstyleMap={
"0":"常规",
"1":"斜体",
"2":"粗体",
"4":"下划线",
"8":"粗斜体"
}>

使用FreeMarker有一个非常不好的地方就是id的处理,数字型的,一旦超过3位,一定要使用 c 函数转一下,否则就会带上逗号分隔,如:38,383,838。吃了不少亏

用jsp有时候比较迷茫是自己写个tag整形,还是放到Action里处理好。还有就是在jsp里写代码的度也不好把握

===========

选择freemarker的原因:  1、性能。velocity应该是最好的,其次是jsp,普通的页面freemarker性能最差(虽然只是几毫秒到十几毫秒的差距)。 但是在复杂页面上(包含大量判断、日期金额格式化)的页面上,freemarker的性能比使用tag和el的jsp好。  2、宏定义比jsp tag方便  3、内置大量常用功能。比如html过滤,日期金额格式化等等,使用非常方便  4、支持jsp标签  5、可以实现严格的mvc分离 //几乎公认。

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

FreeMarker缺点:
freemarker的map限定key必须是string,不支持其他数据类型。 freemarker的变量必须有值,没有被赋值的变量就会抛出异常。程序里面几乎所有可能出现空值的变量统统需要加上${xxx?if_exists},有些循环条件还需要写if判断。 不能在群集上面发布应用,freemarker支持在页面里面直接操作Session,request等,例如${Session[...]},但不能对其序列化。

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

1、首先freemarker是模板,当你打开页面的时候freemarker可也说是加载最快的。jsp则需要转换为servlet所以第一次要慢一些。2、struts2的所有标签都是用freemarker写的,这也就是说你在freemarker中就可以直接引用struts2的任何标签,相当的方便。jsp不行吧。struts也不行。只有struts2。3、如果使用了freemarker它与json一起使用会方便的很多。//这个可以认同的。

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

热点排行