文档章节

Java模板引擎 HTTL

kevin728971010
 kevin728971010
发布于 2016/11/07 15:36
字数 770
阅读 106
收藏 1

 

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分包依赖检测,确保分包依赖的合理性。

本文转载自:http://www.oschina.net/p/httl

kevin728971010
粉丝 17
博文 23
码字总数 11609
作品 0
渝北
后端工程师
私信 提问
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
3.4K
17
HTTL如何生成文件?

想做HTTL的模板生成文件,但是老是报没有找到文件异常,如何配置HTTL?在java方法里运行不需要通过servlet Properties p = new Properties(); InputStream inputStream = new FileInputStrea...

bing_chuan
2013/12/24
399
0
SpringMVC结合HTTL时,模板类编译失败,提示“软件包找不到”,“找不到符号”等信息

日志如下: httl: 1.0.11, jvm: 1.6.0_26, os: Windows 7 6.1 amd64 java.text.ParseException: Failed to compile class, cause: Compilation failed. class: httl.spi.translators.templat......

oulaly
2015/03/06
646
1
编写自定义的 Velocity 指令

Velocity 是一个高效、简洁的 Java 模板引擎,而且有很好的可扩展性,这使之特别适合在 Web 项目中使用。本文通过一个实际应用例子对 Velocity 的模板语言中的指令系统进行了介绍,并演示了如...

红薯
2009/04/28
2.5K
14
Beetl 2.7.11 发布,Java 模板引擎  

Beetl 2.7.11 发布了。本次发布去掉了Jfinal2.0的支持,如果需要集成Jfinal2,请参看官网文档 修复了上个版本pom配置错误导致Antlr Runtime 不能下载的错误 Beetl是新一代的模板引擎。总得来...

闲大赋
2017/02/08
1K
13

没有更多内容

加载失败,请刷新页面

加载更多

JS基础-该如何理解原型、原型链?

JS的原型、原型链一直是比较难理解的内容,不少初学者甚至有一定经验的老鸟都不一定能完全说清楚,更多的"很可能"是一知半解,而这部分内容又是JS的核心内容,想要技术进阶的话肯定不能对这个...

OBKoro1
今天
6
0
高防CDN的出现是为了解决网站的哪些问题?

高防CDN是为了更好的服务网络而出现的,是通过高防DNS来实现的。高防CDN是通过智能化的系统判断来路,再反馈给用户,可以减轻用户使用过程的复杂程度。通过智能DNS解析,能让网站访问者连接到...

云漫网络Ruan
今天
14
0
OSChina 周一乱弹 —— 熟悉的味道,难道这就是恋爱的感觉

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @xiaoshiyue :好久没分享歌了分享张碧晨的单曲《今后我与自己流浪》 《今后我与自己流浪》- 张碧晨 手机党少年们想听歌,请使劲儿戳(这里)...

小小编辑
今天
2.7K
24
SpringBoot中 集成 redisTemplate 对 Redis 的操作(二)

SpringBoot中 集成 redisTemplate 对 Redis 的操作(二) List 类型的操作 1、 向列表左侧添加数据 Long leftPush = redisTemplate.opsForList().leftPush("name", name); 2、 向列表右......

TcWong
今天
46
0
排序––快速排序(二)

根据排序––快速排序(一)的描述,现准备写一个快速排序的主体框架: 1、首先需要设置一个枢轴元素即setPivot(int i); 2、然后需要与枢轴元素进行比较即int comparePivot(int j); 3、最后...

FAT_mt
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部