文档章节

Java模板引擎 HTTL

kevin728971010
 kevin728971010
发布于 2016/11/07 15:36
字数 770
阅读 103
收藏 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.3K
17
HTTL如何生成文件?

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

bing_chuan
2013/12/24
376
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
557
1
编写自定义的 Velocity 指令

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

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

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

闲大赋
2017/02/08
1K
13

没有更多内容

加载失败,请刷新页面

加载更多

访问LNMP虚拟主机出现报错:No input file specified.

之前一直是使用lnmp一键包,但是访问创建的虚拟主机,并没有出现过的错误:No input file specified. 网上的文章很多,但是都是转载,而且原因也很多,根本不适用 后面在lnmp一键包官网找到解...

wenzhizhong
22分钟前
1
0
OSChina 周三乱弹 —— 你还能管得住观众愿意看谁吗

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享李宗盛的单曲《凡人歌 (电视剧《碧海情天》主题曲)》:你我皆凡人,生在人世间#今日歌曲推荐# 《凡人歌 (电视剧《碧海情天》主...

小小编辑
45分钟前
292
11
Inf2Cat, signability test failed vc2019 wdk驱动sys build签名

解决问题的方法非常简单,只要让Inf2Cat验证的时候使用local时间就可以了。打开package工程的属性,在inf2cat工具的属性中进行设置。

simpower
今天
3
0
LinkedHashMap 是如何保证有序的?

//map的遍历方法如下 for (Map.Entry<String,Integer> entry : map.entrySet()) { System.out.println(entry.getKey()+":"+entry.getValue()); } HashMap#entry......

暗中观察
今天
3
0
Linux的基本命令

目录的操作命令(增删改查) 增: mkdir 目录名称; 查: ls 可以看到该目录下的所有的目录和文件 ls -a,可以看到该目录下的所有文件和目录,包括隐藏的 ls -l,可以看到该目录下的所有目录和...

凹凸凸
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部