`
javatar
  • 浏览: 1700341 次
  • 性别: Icon_minigender_1
  • 来自: 杭州699号
社区版块
存档分类
最新评论

HTTL增加注释语法

阅读更多
上一篇帖子:http://www.iteye.com/topic/1114669,本来只是想试验模板引擎性能优化,没想到骂声最多的是HTML属性语法,所以在0.2.0版本加上了HTML注释语法,指令仿Velocity,如:
<!--#var(User user, Book[] books)-->
<!--#if(user.role == "admin")-->
<table>
    <!--#foreach(book in books)-->
    <tr>
        <td>${book.title}</td>
    </tr>
    <!--#end-->
</table>
<!--#end-->

上面的HTTL模板等价于Velocity模板:
#if($user.role == "admin")
<table>
    #foreach($book in $books)
    <tr>
        <td>${book.title}</td>
    </tr>
    #end
</table>
#end

与Velocity的区别:

(1) HTTL指令必需加注释外壳“<!-- -->”,只支持<!--#if()-->,不支持#if(),确保不干扰HTML本身的有效源码。

(2) HTTL指令中的变量不加$符,只支持(book in books),不支持($book in $books),因为指令中没有加引号的字符串就是变量,和常规语言的语法一样,加$有点废话。

(3) HTTL占位符必需加大括号“{ }”,只支持${aaa},不支持$aaa,因为$在JavaScript中也是合法变量名符号,而${}不是,减少混淆,也防止多人开发时,有人加大括号,有人不加,干脆没得选,都加,保持一致。

(4) HTTL与Velocity指令对比:
HTTL Velocity 异同 功能
${xxx.yyy} ${xxx.yyy} 相同 输出占位符
<!--## ... --> #* ... *# 相似 不显示注释块
<![CDATA[## ... ]]> #[[ ... ]]# 相似 不解析文本块
<!--#var(Xxx xxx)--> 不支持 不同 定义输入参数类型
<!--#set(xxx = yyy)--> #set($xxx = $yyy) 相同 给变量赋值
<!--#if(xxx == yyy)--> #if($xxx == $yyy) 相同 条件判断
<!--#elseif(xxx == yyy)--> #elseif($xxx == $yyy) 相同 否则条件判断
<!--#else--> #else 相同 否则判断
<!--#end--> #end 相同 结束指令
<!--#foreach(item in list)--> #foreach($item in $list) 相同 列表循环
<!--#breakif(xxx == yyy)--> #if($xxx == $yyy) #break #end 相似 中断循环
<!--#block(xxx)--> #define($xxx) 相似 捕获块输出到变量中
<!--#macro(xxx)--> #macro($xxx) 相似 宏替换,模板片断
${read("xxx.txt")} #include("xxx.txt") 相似 读取文本文件内容
${include("xxx.httl")} #parse("xxx.vm") 相似 包含另一模板输出
${evaluate("1 + 2")} #evaluate("1 + 2") 相似 表达式求值
不支持 #stop 不同 停止模板解析

HTTL保持最小指令集,以后也不会增加指令,所有功能均从表达式上扩展。

语法解析器配置:

(1) 配置使用注释语法:
parser=com.googlecode.httl.support.parsers.CommentParser

语法示例:
<!--#if(user.role == "admin")-->
<!--#end-->


(2) 如果想使用属性语法,请在httl.properties中配置:
parser=com.googlecode.httl.support.parsers.AttributeParser

语法示例:
<table if="user.role == 'admin'">
</table>


(3) 如果想使用原CommonTemplate语法,请在httl.properties中配置:
parser=com.googlecode.httl.support.parsers.CommonTemplateParser

语法示例:
$if{user.role == "admin"}
$end


(4) 如果想同时使用多种语法,请在httl.properties中配置:
parser=com.googlecode.httl.support.parsers.MultiParser
parsers=com.googlecode.httl.support.parsers.AttributeParser,com.googlecode.httl.support.parsers.CommentParser

语法示例:
<!--#if(user.role == "admin")-->
<table if="user.role == 'admin'">
</table>
<!--#end-->


下载地址:
http://code.google.com/p/httl/downloads/list

HTTL0.2.0版本变更记录:

1. 增加注释语法并设为缺省,如:<!--#if(...)-->
2. 支持热加载,当文件变更时,自动重新加载,配置:reloadable=true
3. 支持启动时预编译,配置:precompiled=true
4. 异常信息显示出错位置周边内容,更容易排错
5. 支持注释块,不解释块,特殊符转义,如:\#, \$
6. 支持include,read,evaluate函数(可自行扩展),如:${include("xxx.httl")]
7. 支持集合泛型参数,如:#define(List<Book> books)
8. 自动空指针检测,比如:${user.role},当user为null时不会空指针
9. 自动条件补全,比如:#if(books)等价于#if(books != null && books.size > 0)
10. 支持foreach状态栈,多层foreach时,可通过${foreach.parent.index}获取上层foreach状态
11. 允许设置foreach状态变量名
12. 支持方括号数组,如:#foreach(c in [a, b, c])
13. 支持双点号序列,如:#foreach(c in a..c)或#foreach(i in 1..2)或#foreach(day in "Monday".."Sunday")
14. 支持集合或运算,选择不为空的集合,如:#foreach(book in books1 | books2)
15. 支持Date类型比较,如:#if(date1 > date2)
16. 支持new操作,如:${new Date()}
17. 支持强制转型,如:#set(user = (User) param)
18. 增加HttlServlet,支持将请求经过MVC框架处理并填充request属性后forward到HttlServlet进行页面渲染
19. 兼容JDK1.5,需配置:compiler=com.googlecode.httl.support.compilers.JavassistCompiler
分享到:
评论
2 楼 yukungis 2016-09-28  
reloadable=true 在tomcat下配置不生效,在jetty下又可以?
1 楼 cole_dda 2011-09-24  
建议对Map对象而不是Bean对象提供完善的支持,因为现在根本就不支持Map,表达式都是直接编译,如果使用Map,需要处理

相关推荐

    httl-1.0.11 jar包

    - **简洁语法**:HTTL使用类似于JavaScript的表达式语法,如 `${var}` 表示变量,`@tag` 表示标签,易于理解和编写。 - **隔离安全**:HTTL通过沙箱机制限制了模板的执行权限,避免了模板代码可能带来的安全风险。...

    HTTL模板引擎

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

    httl:超文本模板语言和引擎

    超文本模板语言( HTTL )和引擎 文献资料网页:|示例:|用户指南语法:|配置:|开发指南整合:英文|中文设计:英文|中文帮助(常见问题/团队成员):英语|中文 下载https://github.com/httl/httl/tags 或克隆项目...

    当前流行的模板引擎效率分析(velocity,freeMarker,Smarty4j,httl)

    同时,HTTL的语法简洁明了,易于理解和使用。 在进行模板引擎的效率分析时,我们通常会关注以下几个方面: 1. **解析速度**:这是指模板引擎处理模板并生成Java字节码的速度,这直接影响到应用的启动时间和响应...

    基于maven管理的 spring4 0 3+struts2 2 3 16 1+hibernate4 3 4 Final+httl1 0 11 的简单留言本

    自己学习用的,基本上采用都是最新版的程序,jre7编译 不建议直接导入,自己新建maven项目,然后一步步的导入文件,这样有利于学习 1分只是象征,如果一分都没有 ...互相学习,互相进步吧!"&gt;自己学习用的,基本上采用...

    魔塔游戏开发素材

    【魔塔游戏开发素材】是一份集合了用于创建魔塔游戏的重要资源,为开发者提供了丰富的素材,便于构建属于自己的魔塔冒险世界。魔塔是一种基于数字逻辑和策略的像素风格游戏,深受玩家喜爱。这份素材可能包括角色图像...

    T4模板使用及CSHTML共5个/第4个

    T4模板使用及CSHTMLT4模板使用及CSHTML

    html颜色库

    HTML颜色库是一个全面的资源,包含了几乎所有的颜色代码值,为网页设计、前端开发以及其他需要颜色编码的应用提供了极大的便利。这个库不仅包含了基本的颜色名称,还涵盖了十六进制(Hex)、RGB、RGBA、HSL以及HSLA...

    文件的上传与下载过滤操作技术(java jsp )

    在IT行业中,文件的上传与下载是Web应用中常见的功能,尤其在企业级系统中更是不可或缺。本技术探讨的是如何使用Java和JSP实现这一功能,同时涉及到了过滤器(Filter)和登录验证的实践。以下将详细介绍这些知识点。...

    2018年m301H盒子修复教程

    《2018年m301H盒子修复教程》 在数字娱乐设备领域,智能电视盒子因其便捷的网络功能和丰富的应用体验而备受青睐。然而,设备在使用过程中难免会出现一些问题,如系统崩溃、无法启动等,这就需要我们进行故障修复。...

    TTL 完美破解固件备份 M301H_3798mv300h TTL 完美破解固件备份 救砖.7z

    标题中的“TTL完美破解固件备份M301H_3798mv300h TTL完美破解固件备份 救砖.7z”指的是一个针对特定型号(M301H)设备的固件备份文件集,其中包含了多个关键的系统组件。这个7z压缩包显然用于备份或恢复设备的固件,...

    TTL电平与CMOS电平的区别.doc

    然而,TTL的缺点在于其并行数据传输方式对于长距离传输不太适用,因为会出现偏相和不对称问题,增加传输的不可靠性。此外,未使用的TTL输入端应保持高电平状态,以避免逻辑混乱。 相比之下,CMOS电路采用MOSFET...

    计算机多媒体试题.docx

    考试时间:120分钟 一、单项选择题(每题1分,共50分) MP3代表的含义 A、一种视频格式 B、一种音频格式 C、一种网络协议 D、软件的名称 超文本标记语言是指 A、 WWW B、 HTTL C、 HTML D、 VRML CD-ROM是指 A、...

    多媒体计算机技术试题及答案.doc

    超文本标记语言是指 B A、 WWW B、 HTTL C、 HTML D、 VRML 3. CD-ROM是指 B A、数字音频 B、只读存储光盘 C、交互光盘 D、可写光盘 4. 数码相机是利用__B______感受光信号,使转变为电信号,再经模/数转换变成数字...

    TTL电路.pdf

    包括SN54/74系列,(其中54系列工作温度为-55℃~+125℃,74系列工作温度为0℃~+75℃),低功耗系列简称LTTl,高速系列简称HTTL。 第二代TTL 包括肖特基箝位系列(STTL)和低功耗肖特基系列(LSTTL)。 第三代...

    Head First Servlet JSP(清晰中文版).part4

    如果在HTTL中引入Java,JSP则应运而生 2 Web应用体系结构:高层概述 考试要求 什么是容器,容器能带给你什么? 代码里有什么 命名servlet,使用DD将Servlet映射到URL 故事:Bob构建了一个速配网站(MVC) ...

    Head First Servlet JSP(清晰中文版).part2

    如果在HTTL中引入Java,JSP则应运而生 2 Web应用体系结构:高层概述 考试要求 什么是容器,容器能带给你什么? 代码里有什么 命名servlet,使用DD将Servlet映射到URL 故事:Bob构建了一个速配网站(MVC) ...

    Head First Servlet JSP(清晰中文版).part3

    如果在HTTL中引入Java,JSP则应运而生 2 Web应用体系结构:高层概述 考试要求 什么是容器,容器能带给你什么? 代码里有什么 命名servlet,使用DD将Servlet映射到URL 故事:Bob构建了一个速配网站(MVC) ...

    Head First Servlet JSP(清晰中文版).part1

    如果在HTTL中引入Java,JSP则应运而生 2 Web应用体系结构:高层概述 考试要求 什么是容器,容器能带给你什么? 代码里有什么 命名servlet,使用DD将Servlet映射到URL 故事:Bob构建了一个速配网站(MVC) ...

Global site tag (gtag.js) - Google Analytics