HTTL (Hyper-Text Template Language) 是一个高性能的开源JAVA模板引擎, 适用于动态HTML页面输出, 可替代JSP页面, 指令和Velocity相似。个人觉得httl的语法要简洁很多,使用更方便,更易上手。
ex:
<html>
<body>
#if(books)
<table>
#for(Book book : books)
<tr>
<td>${book.title}</td>
</tr>
#end
</table>
#end
</body>
</html>
指令两边可以套上HTML注释,以免干扰原生HTML页面。
注:HTTL在解析时,将自动去除指令边上的HTML注释符。(缺省已开启过滤)
##行注释
#**#块注释
${输出变量}:输出表达式的计算结果,并进行过滤,比如:过滤变量中的HTML标签。
$!{输出变量}:原样输出表达式的计算结果,不进行任何过滤,通常用于输出HTML片段。
#set(类型 变量)
声明变量的类型,模板内部其它变量类型基于此类型推导
注:暂时只支持List和Map的一级泛型,多级泛型能解析,但不能推导。
如果有全局的变量,可以用配置全局导入变量类型声明,就不需要在每个模板声明:import.variables+=User loginUser
#if(条件)
语句
#elseif(条件)
语句
#else
语句
#end
语法与java代码类似
#for(类型 变量:变量)
语句
#end
迭代表达式产生的集合,以集合中的每项值,重复输出指令所包含的块
将指令块封装成可复用的模板片段,它可当作变量传递,可重复执行输出,可被继承覆盖。
##行注释
#**#块注释
原样输出模板内容,用于输出纯文本内容,或批量转义块中的特殊符。
原样输出指令特殊符,用于输出纯文本内容。
配置模板的根目录:
template.directory=/META-INF/templates
配置模板加载缺省编码,缺省为UTF-8:
input.encoding=UTF-8
output.encoding=UTF-8
配置是否允许热加载,缺省为false:
Reloadable=false
开启热加载后,模板引擎在getTemplate()时会检查文件的lastModified时间,如果比上次加载的时间新,就重新加载。
请注意:旧的模板不会被卸载,经常改文件会导致内存perm区越来越大,只能在开发阶段使用。
使用fastjson进行转码,需配置:
json.codec=httl.spi.codecs.FastjsonCodec
导包配置:
import.packages+=com.foo,com.bar
Demo:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>项目列表</title>
</head>
<body>
<!--变量指令,声明变量的类型,模板内部其它变量类型基于此类型推导-->
#set(List<InfoCarNews> infoCarNewsList)
<table >
<!--循环指令,迭代表达式产生的集合,以集合中的每项值,重复输出指令所包 含的块-->
#for(InfoCarNews carNews:infoCarNewsList)
<tr>
<!--条件指令
注:是带过滤的输出指令、是不带过滤的输出指令,不进行过滤的指令通常输出HTML片段-->
#if(carNews.category == 1)<td >类别1</td>
#elseif(carNews.category == 2)<td >类别2</td>
#else<td >无类别</td>
#end
</tr>
#end
</table>
</body>
</html>
httl模板网址:http://httl.github.io/zh/