Velocity
FreeMarker
【 FreeMarker Eclipse Plugin与 FreeMarker IDE:Eclipse平台下的辅助开发工具】
Jamon
JDynamiTe
JByte
Tea
Jxp
StringTemplate
Better Templates for Everybody
Canvas
Guglhupf XTE
WebMacro
Viento
Jostraca
LSP
JLoom
MiniTemplator
CommonTemplate
二、CommonTemplate特性:
1.只有一个语法规则:$指令名{表达式},使用更简单,更统一。
2.支持语法外套,可以在Dreamwear下正常使用WYSWYG,并且语法外套也是可扩展的。
3.微核理念,高度可扩展,除了核心API,其它逻辑相关处理都是外置的,包括所有指令及表达式,标准的 for, if, else 等指令,以及 + - * / 等表达式,均可被替换。
4.使用主控迭代器模式替代传统的被动访问器模式,引擎只负责将模板解析成指令树,其它所有处理均由扩展指令自身完成,给扩展指令以最大的控制权。(类似于StAX与SAX的区别)
5.对已有不可变类(String,Number,Date等),属性扩展,采用open class思想。(类似javascript的prototype)
6.支持宏引用及模板继承,更有利于模板组件化。
7.内置的国际化支持,国际化信息处理更方便。
8.多种优化措施,性能更优:
(1) 采用针对特定语法写的低级专有DFA解析器解析,试验表明比使用通用抽象的BNF语法体系解析(Java中一般用JavaCC或AntLR)要快,因为BNF为了通用,考虑了太多因素,导致其效率降低,当然,BNF在处理复杂语法(比如要解析C/C++/Java等语法时)很有优势,但CommonTemplate的语法非常简单且统一,所以使用专有的低级解析器是比较好的选择。
(2) 解析结果被表示成一个线程安全(不变类级)的指令树,单个实例可以在多线程中任意重复使用,避免使用重复解析或克隆等性能损耗。
(3) 解析结果可以在内存中缓存起来,以减少解析次数及IO量,并且缓存策略是可扩展的。(已内置实现了NONE, STRONG, SOFT, FIFO, LRU, MRU, OSCACHE, EHCACHE等缓存策略)
RTFTemplate
Jtpl
VMC Injection
Japid
Hapax
Xtempore
Thymeleaf
收录时间:2011-04-19 20:44:32
smarty4j
Google XML Pages
- 支持多种语言(包括Java&JavaScript; C++开发中)。
- 支持运行期重新编译。
- 编译时类型检查和部分标记验证。
- 类型自动识别,减少了XSS漏洞的机会
- 易于使用的国际化支持
- 方便的参数传递/模块化系统
- 非常轻量的运行系统
Cambridge
Cambridge模板是纯html/xml文档,因此可以直接在浏览器中查看或在其它Html编辑器中可视化编辑而不会产生错误。
Cambridge可以在独立的Java程序中使用,也可以与Servlets和其它流行Web框架如:Spring Mvc、Struts, Play Framework、JAX-RS等集成使用。
Aluminum
Django模板语言的JAVA移植版 Jangod
内建常用标签:
- Extends 当前模板扩展的父模板
- Block 模板继承的可替代单元
- Include 载入其它模板作为本模板的一个片段
- If…else 条件判断逻辑求值
- For 按特定的顺序循环一个数据集合
- Cycle 轮流输出一组变量的其中一个
- Ifchanged 检查变量当前值与上次存储的值是否发生变化
- Set 把一个语法运算结果保存到一个新的变量中
内建过滤器:
- Default 设置空值的默认输出内容
- Contain 集合或字符串是否包含某个元素或子串
- Length 取集合元素个数或字符串长度
- Reverse 倒序排列集合元素(如果集合有序的)
- Random 从集合中随机取一个元素
- Equal 逻辑相等判断
- And 逻辑与运算
- Or 逻辑或运算
- Not 真假值取反
- Date 格式化时间变量
- Abs 取变量的绝对值
- Divisible 判断变量是否被整除
- Add 进行变量的加法运算
- Multiply 进行变量的乘法运算
- Divide 进行变量的除法运算
- Escape html特殊字符转义
- Lower 把字符串都转换成小写。
- Upper 把字符串都转换成大写
- Truncate 按一定长度截取字符串
- Cut 去除字符串中的特定子串
引擎特点:
- 智能的强容错模板解析
- 巧妙使用过滤器处理各种复杂的语法运算
- 各种特性的数据容器
- 自定义标签和过滤器
httl
语法方面的区别:
发现基于文本指令的,基于HTML标签的,基于HTML注释的,都有不少模板引擎实现,
为了标新立异以及使用的直观性,HTTL采用基于HTML属性的指令。
选型方面的区别:
- Velocity采用JavaCC编译成AST树,解释执行。
- FreeMarker类似,只是采用FreeCC。
- Smarty4j采用ASM生成字节码。
- HTTL采用先将模板转译成Java代码,再由JDK或Javassist编译成字节码。
性能测试:
- 模板内循环显示100行数据。
- 每模板各运行一万次。
- 模板大小约800字符。
- 模板每次运行输出内容约27K字符。
测试结果:
Engine | Compile | Run | TPS |
Freemarker | 125ms | 16,934ms | 590t/s |
Velocity | 110ms | 19,278ms | 518t/s |
Smarty4j | 78ms | 21,653ms | 461t/s |
Httl | 547ms | 2,077ms | 4,814t/s |
Java | 0ms | 2,016ms | 4,960t/s |
更多信息参见:
http://code.google.com/p/httl
HTTL缺省使用Jdk的javax,tools编译字节码,需要500ms左右,如果换成Javassist编译,编译时间可以降到200ms左右,但字节码执行效率略差一点,如果想换成Javassist,只需在httl.properties中加入。
注:Javassist不支持1.5的语法,所以要设置java.version=1.4
Beetl java模板引擎
Beetl目前版本是2.0,大小650K,相对于其他java模板引擎,具有功能齐全,语法直观,性能超高,开发和维护模板有很好的体验。是新一代的模板引擎。总得来说,它的特性如下:
-
功能完备:同主流的java模板引擎相比,Beetl具有绝大多数功能。适用于各种应用场景,从对响应速度有很高要求的大网站到功能繁多的CMS管理系统都适合。Beetl本身还具有很多独特功能来完成模板编写和维护,这是其他模板引擎所不具有的。
-
非常简单:类似Javascript语法和习俗,只要半小时就能通过半学半猜完全掌握用法。拒绝其他模板引擎那种非人性化的语法和习俗。
-
超高的性能:Beetl 远超过主流java模板引擎性能,而且消耗较低的CPU
-
易于整合:Beetl能很容易的与各种web框架整合,如Spring MVC,JFinal,Struts,Nutz,Jodd,Servlet等。
-
支持模板单独开发和测试,即在MVC架构中,即使没有M和C部分,也能开发和测试模板。
-
扩展和个性化:Beetl支持自定义方法,格式化函数,虚拟属性,标签,和HTML标签. 同时Beetl也支持自定义占位符和控制语句起始符号也支持使用者完全可以打造适合自己的工具包.
关于性能
通过与主流模板引擎Freemaker,Vecloity以及JSP对比,Beetl均远高于前面三个,这是因为宏观上,通过了优化的渲染引擎,IO的二进制输出,字节码属性访问增强,微观上,通过一维数组保存上下文,合并静态文本,通过重复使用字节数组来防止java频繁的创建和销毁数组,还使用模板缓存,运行时优化等方法。
独特功能
Beetl有些功能是发展了10多年的模板引擎所不具备的,这些功能非常利于模板的开发和维护,如下
- 自定义占位符和控制语句起始符号,这有利于减小模板语法对模板的倾入性,比如在html模板中,如果定义控制语句符号是,那么,大部分模板文件都能同过浏览器打开。有的使用者仅仅采用了单个符号@ 以及回车换号作为控制语句起始符号,这又能提高开发效率
- 可单独测试的模板。无需真正的控制层和模型层,Beetl的模板就可以单独开发和测试
- 同时支持较为松散的MVC和严格的MVC,如果在模板语言里嵌入计算表达式,复杂条件表达式,以及函数调用有干涉业务逻辑嫌疑,你可以禁止使用这些语法。
- 强大的安全输出,通过安全输出符号!,能在模板变量,变量属性引用,for循环,占位符输出,try-catch中等各个地方提供安全输出,保证渲染正常
- 模板变量:运行将模板的某一部分输出像js那样赋值个一个变量,稍后再处理。利用模板变量能完成非常复杂的页面布局(简单的布局可使用layout标签函数)
- 类型推测,能在运行的时候推测模板变量类型,从而优化性能,也可以通过注解的方法显示的说明模板变量属性(这是非必须的,但有助于IDE自动提示功能)
- 可插拔的设计,错误信息提示,模板引擎缓存机制,模板资源管理,本地调用的安全管理器,严格MVC限制,模板引擎本身都有默认的实现,但又完全可以自定义以适合特定需求
- 增强的语法,如for-elsefor, select-case,安全输出符号! 等,这些语法特别适合模板开发
- 性能超高,具有最快的模板解释引擎,同时,又有较低的CPU消耗。适合各类模板引用,如CMS系统,超高访问量的门户系统