java开源模板引擎
- 支持多种语言(包括Java&JavaScript; C++开发中)。
- 支持运行期重新编译。
- 编译时类型检查和部分标记验证。
- 类型自动识别,减少了XSS漏洞的机会
- 易于使用的国际化支持
- 方便的参数传递/模块化系统
- 非常轻量的运行系统
Cambridge模板是纯html/xml文档,因此可以直接在浏览器中查看或在其它Html编辑器中可视化编辑而不会产生错误。
Cambridge可以在独立的Java程序中使用,也可以与Servlets和其它流行Web框架如:Spring Mvc、Struts, Play Framework、JAX-RS等集成使用。
内建常用标签:
- 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 去除字符串中的特定子串
引擎特点:
- 智能的强容错模板解析
- 巧妙使用过滤器处理各种复杂的语法运算
- 各种特性的数据容器
- 自定义标签和过滤器
语法方面的区别: 发现基于文本指令的,基于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目前版本是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系统,超高访问量的门户系统
java开源模板引擎的更多相关文章
- .net 开源模板引擎jntemplate 教程:基础篇之语法
一.基本概念 上一篇我们简单的介绍了jntemplate并写了一个hello world(如果没有看过的,点击查看),本文将继续介绍jntemplate的模板语法. 我们在讲解语法前,首先要了解一下标 ...
- .net 开源模板引擎jntemplate 教程:基础篇之在ASP.NET MVC中使用Jntemplate
在ASP.NET MVC 中使用Jntemplate 上一篇我们详细介绍了jntemplate的标签语法,本篇文章将继续介绍如何在ASP.NET MVC 中使用Jntemplate. 一.使用Jnte ...
- Java 前端模板引擎学习:thymeleaf 模板引擎
模板引擎接口 ITemplateEngine 一.后台数据与外部数据 1.处理后台数据 $表达式是个变量表达式,用于处理在 request parameters and the request, s ...
- .net 开源模板引擎jntemplate 实战演习:基础篇之入门
一.简介 模板引擎是Web开发中非常重要的一环,它负责将页面上的动态内容呈现出最终的结果展现给前端用户,在asp.net mvc中,我们最熟悉的就是Razor了,作为官方的视图引擎(视图引擎不等同于模 ...
- java 框架-模板引擎FreeMarker
https://www.cnblogs.com/itdragon/p/7750903.html FreeMarker是一个很值得去学习的模版引擎.它是基于模板文件生成其他文本的通用工具.本章内容通过如 ...
- java开源工作流引擎jflow的流程应用类型分类讲解
关键字: 驰骋工作流程快速开发平台 工作流程管理系统 工作流引擎 asp.net工作流引擎 java工作流引擎. 开发者表单 拖拽式表单 工作流系统CCBPM节点访问规则接收人规则 适配数据库: o ...
- Java+Velocity模板引擎集成插件到Eclipse及使用例子
一.因为我用的是当前最新的Eclipse4.5,Eclipse中安装集成VelocityEclipse插件之前需要先安装其支持插件:Eclipse 2.0 Style Plugin Support 1 ...
- Java开源工作流引擎Jflow表单方案系列讲解一
关键字: 驰骋工作流程快速开发平台 工作流程管理系统 工作流引擎 asp.net工作流引擎 java工作流引擎. 开发者表单 拖拽式表单 表单方案介绍 适配数据库: oralce,mysql,sq ...
- 一个java 开源神经网络引擎 joone
https://sourceforge.net/projects/joone/files/?source=navbar joone
随机推荐
- shell脚本 批量转换目录下文件编码
发布:JB01 来源:脚本学堂 [大 中 小] 分享一例shell脚本,实现可以批量转换目录下的文件编码,很实用的一个小shell,有需要的朋友参考下.原文地址:http://www.jb ...
- UIButton 按钮控件-IOS开发 (实例)
转自:http://justcoding.iteye.com/blog/1467999 UIButton是一个标准的UIControl控件,所以如果你对UIControl不甚了解还是先看一下我的另一篇 ...
- jsp学习之scriptlet的使用方法
scriptlet的使用 jsp页面中分三种scriptlet: 第一种:<% %> 可以在里面写java的代码.定义java变量以及书写java语句. 第二种:<%! %> ...
- win32之hPrevInstance
看了一篇博客上面说,WinMain函数中的hPrevInstance是上一个示例的句柄,我就想到可不可以使用这个来实现只能运行一个实例呢? int WINAPI WinMain(HINSTANCE h ...
- request的生存期只限于服务器跳转
症状: 刚才想做一个实验,在a.jsp中向request添加属性(页面编码为UTF-8),在b.jsp中删除该属性(页面编码为ISO-8859-1),通过ServletRequestAttribute ...
- ibatis中in语句参数传入方法
第一种:传入参数仅有数组,iterate中不能有数组的属性名 <select id="GetEmailList_Test" resultClass=" ...
- 配置ubuntu - tftp server服务器步骤
配置Ubuntu tftp服务的步骤: 1.安装相关软件包:Ubuntu tftp(服务端),tftp(客户端),xinetd sudo apt-get install tftpd tftp xine ...
- window.parent.document解决原生js或jQuery 实现父窗口的问题
做WEB前端开发的过程中,经常会有这样的需求,用户点击[编辑]按钮,弹出一个对话框,在里边修改相应的值,然后把修改后的值显示在原页面,最后点击保存. 用window.parent.document.g ...
- HeadFirst jsp 08 无脚本JSP
web页面设计人员真的必须懂 java ? web页面人员可以很快学习 EL 语言. 目前不知道 EL 应用前景如何, 但是我们香港系统没有使用 EL. include 指令 include指令告诉容 ...
- C++ 类中的静态成员变量,静态成员函数
//类中的静态成员变量,静态成员函数 #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; /* ...