Java模板引擎 HTTL

Apache
Java
跨平台
2011-09-14
老盖

HTTL(Hyper-Text Template Language)是一个高性能的开源JAVA模板引擎,适用于动态HTML页面输出,可替代JSP页面,指令和Velocity相似。

简洁友好的模板语法

语法尽可能符合HTML和JAVA开发者的直觉,指令和老牌的Velocity类似,但改进了Velocity中不符合直觉的地方。 只保留最基本的条件迭代控制指令,渲染过程不允许修改原始数据,防止模板带过多业务逻辑。默认使用HTML注释语法,避免干扰原生HTML页面。

<html>
    <body>
        <!--#if(books)-->
        <table>
            <!--#for(Book book : books)-->
            <tr>
                <td>${book.title}</td>
            </tr>
            <!--#end-->
        </table>
        <!--#end-->
    </body>
</html>

改进Velocity不符合直觉的地方:

  • 指令中的变量不用加$符,如:#if(a == b),而不像Velocity那样:#if($a == $b),加$有点废话,容易忘写。
  • ${x}当变量为null时,输出空白串,而不像Velocity那样:输出源码${x},如果用$!{x},感叹号容易忘记写。
  • 支持在输出时进行表达式计算,如:${i + 1},而不像Velocity那样:要先#set($j = $i + 1)到一个临时变量。
  • 采用更直观的方式,调用静态工具方法,如:${"a".toChar},而不像Velocity那样:$(Tool.toChar("a"))。

详细语法,以及Velocity对比,请参见:语法 & 对比

精益求精的性能优化

将模板编译成JAVA字节码运行,并使用强类型推导,减少运行期反射和转型, 渲染速度接近Java硬编码输出,比Velocity等其它模板引擎快一个数量级。 比JSP也快,因为JSP只有Scriptlet是编译的,Tag和EL是解释执行的,而HTTL是全编译的。

模板引擎性能测试

测试用例和环境,以及优化策略,请参见:性能 & 优化

高质量的设计与实现

模板自描述,在模板内声明入参变量类型,并基于入参类型推导模板内所有变量类型,使IDE能方便的实现变量方法补全提示, 对开发过程友好。出错信息精确定位行列,并显示出错位置前后相关内容。采用微核+插件体系,所有环节均可扩展,方便集成和二次开发。

测试覆盖率

 

严格确保质量,请放心使用,HTTL在发布前已做:

  • 所有语法指令函数模板单元测试,确保所有模板指令的解析和执行正确。
  • 性能对比基准测试,确保性能接近Java硬编码输出,高出其它引擎一个数量级。
  • 长时间运行稳定性测试,确保不出现FullGC,内存溢出,死锁,CPU占满,抖动等。
  • 内存占用和CPU耗时Profiler分析,确保不出现非预期的内存和CPU瓶颈。
  • Web应用集成测试,确保在SpringMVC,Struts,Webx等集成中可用。
  • 环境兼容性测试,确保在Liunx,Windows,OSX,JDK1.5,1.6,1.7等环境可用。
  • FindBugs代码问题检测,确保不出现空指针,资源未关闭等明显错误。
  • JDepend分包依赖检测,确保分包依赖的合理性。

并全部通过,详细设计与质量分析,请参见:设计 & 质量

加载中

评论(7)

轻点666
轻点666
文档很详细,写的很赞。
travrlr
travrlr
哥 ,文档访问不好了
开不了囧
开不了囧
文档详细,代码质量高,读源码收获良多
meluo
meluo
httl 用的人多不,为什么idea 都没有对httl 的高亮显示
MartinBockZhu
MartinBockZhu
mark #HTTL#
MartinBockZhu
MartinBockZhu
mark #HTTL#
iovvo
iovvo
#HTTL# 学习培训需求, 有经验的同学可联系我.

HTTL 1.0.11 版本发布,Java 模版引擎

HTTL-1.0.11版本主要修复BUG,为稳定版本,欢迎使用。 下载:http://httl.github.io/zh/download.html HTTL (Hyper-Text Template Language) 是一个高性能的开源JAVA模板引擎, 适用于动态H...

2013/08/16 11:48

HTTL 1.0.10 版本发布,Java 模版引擎

HTTL 1.0.10 发布,此版本主要修复用户发现的问题,并增加测试,趋向稳定,建议升级。 下载地址:(已发布到Maven中央库) http://httl.github.io/zh/download.html 变更记录: 功能: #92 ...

2013/07/01 14:53

开源 Java 模板引擎 HTTL 1.0.0 发布

开源 Java 模板引擎 HTTL 1.0.0 发布了,改进记录包括: 修复问题: 1. 解决foreach和if/else联合使用时状态错乱问题。 2. 解决getIsXxx属性解析出错问题。 3. 解决文件加载未使用指定编码问...

2012/10/30 15:39

没有更多内容

加载失败,请刷新页面

没有更多内容

3
回答
httl语言怎样获取session里面的值

急求!!!感谢大神

2016/01/19 16:56
1
回答
jfinal+httl使用ajex,报ot found template /exception/delete.html in ServletResource

不适用ajex进行删除验证使没有问题,使用ajex方式删除,报Not found template /exception/delete.html in S...

2015/10/12 17:53
2
回答
httl基础语法,基础使用方法

@玛雅牛 你好,想跟你请教个问题: 想找一篇讲httl最基本的语法、方法用法的文章,一直找不到,您能不能方便介绍一下,或者给点资料 我是程序员新手,只有简...

2015/08/26 11:59
1
回答
请教httl最基础的语法是什么

@木_风 你好,想跟你请教个问题: 我没有javaweb模板的基础,现在在做一个jfinal和httl的小项目作业,看不懂httl语法,httl怎么跟服务...

2015/08/27 09:34
1
回答
Httl和JFinal整合遇到的问题
JFinal 的回答 2015/04/15 20:38
最佳答案
注意看这个错误提示: Caused by: java.lang.IllegalStateException: Can not get system java compiler. Please run with JDK (NOT JVM), or configure the httl.prope...
6
回答
httl是个坑 ,浪费了一下午时间 ,还是回去整 freemarker

httl是个坑 ,浪费了一下午时间 ,回还是回去整 freemarker 。不能用 整 freemarker 的思想 去整 httl

2013/09/06 16:14
1
回答
SpringMVC结合HTTL时,模板类编译失败,提示“软件包找不到”,“找不到符号”等信息

日志如下: httl: 1.0.11, jvm: 1.6.0_26, os: Windows 7 6.1 amd64 java.text.ParseExc...

2015/03/06 11:29
1
回答
关于使用httl的页面读取List问题

@玛雅牛 你好,想跟你请教个问题: 目前使用httl模板引擎,在Controller返回给页面模板一个 list,在页面模板中 声明 #set(List<...

2014/05/09 14:55
3
回答
httl 有类型 include 的功能么
玛雅牛 的回答 2014/04/25 18:47
最佳答案
有的 继承模板,以当前模板中的宏,替换父模板中的同名宏,执行父模板,输出到当前位置。 ${extends("/layout.httl")} ${extends("/layout.httl","UTF-8")} ${extends("../layout.httl")} ${extends(".....
1
回答
请问模板里怎么获取shiro的session

能不能把默认的session换成shiro的session,请教怎么做。 @玛雅牛 @梁飞

2013/09/30 09:27

没有更多内容

加载失败,请刷新页面

JFinal整合HTTL模板引擎

偶然机会看到了Httl模板引擎。HTTL是一个高性能的开源JAVA模板引擎, 适用于动态HTML页面输出, 可替代JSP页面, 指令和Velocity相似。 HTTL的优点如下: 1)速度快,速度接近Java硬编码输出...

2013/06/08 14:37
2.3K
0
Httl 和NUTZ的整合

传闻中最快的Httl模板,由于最近想做一个简单ERP开始搭建框架在了解HTTL后 觉得整合HTTL和Nutz package com.nutzside.common.mvc.view; import httl.Context; import httl.web.WebEngine...

2013/02/25 09:46
661
0
模版引擎

#一、引擎参考 - BSL 项目地址:https://github.com/boilit/bsl 官方地址:http://boilit.github.io/bsl - Webit-Script 项目地址:https://github.com/zqq90/webit-script 官方地址:http:...

2016/11/18 10:13
15
0
给JFinal添加Shiro插件功能,支持Shiro所有注解-HTTL篇

由于使用HTTL模板引擎,所以也想将Shiro和HTTL集成起来。 具体实现如下,此嗲吗和给JFinal添加Shiro插件功能,支持Shiro所有注解-实现篇中的一样。 package com.jfinal.ext.plugin.shiro; ...

2013/06/12 23:47
3.1K
2
Jfinal和httl整合

public class HttlRenderFactory implements IMainRenderFactory { public Render getRender(String view) { return new HttlRender(view); } public String getViewExtension() { ...

2013/04/06 21:21
860
0
Java模板引擎 HTTL

HTTL(Hyper-Text Template Language)是一个高性能的开源JAVA模板引擎,适用于动态HTML页面输出,可替代JSP页面,指令和Velocity相似。 简洁友好的模板语法 语法尽可能符合HTML和JAVA开发者...

2016/11/07 15:36
103
0
jfinal和httl结合

一导入jar包 二配置web.xml文件 三配置httl.properties文件 此时会出现如下问题: 解决办法: 加入 javassist-3.15.0-GA.jar包 再运行会有如下警告 解决办法: 加入log4j-1.2.16.jar包...

2016/03/18 09:35
38
1
基于HTTL的分页实现

参考了Jfinal-demo中的分页代码,将其转化成HTTL的分页代码。 代码如下/common_macro/pagination.httl: <!--#macro(pagination(Integer currentPage, Integer totalPage, String actionUrl...

2013/07/10 11:32
1K
1
模板template

网上收集

2015/01/12 09:40
28
0
给JFinal添加了类似ROR的Flash功能。

最近在用JFinal开发一个小型的项目,使用的是个人比较认可的HTTL模板引擎。过几天不忙了把相关集成的东西发出了。 今天先发一个:给JFinal添加了类似ROR的Flash功能。 在使用JFinal做开发时,...

2013/06/04 12:39
765
1

没有更多内容

加载失败,请刷新页面

返回顶部
顶部