Java模板引擎 smarty4j

码农软件 · 软件分类 · 模板引擎 · 2019-08-24 13:27:25

软件介绍

smarty4j是一个smarty for java的模板引擎,该引擎是将smarty模板从php上移植过来,需要asm-3.0.jar。

smarty4j将文本解析成语法树,然后根据语法树生成Java Code的字节码,相当于一个基于JVM的smarty语法的编译器。语法树的生成采用左序遍历的方式依次生成,大致的语法结点包含语句与表达式两大基本类型,语句结点能保证JVM的语句栈在执行完毕后没有新压入的数据,而表达式结点将产生一个数据。

一般的结构,最顶层是一个文档结点,内部可以由三种结点组成,分别是文本结点、函数结点与输出结点

  • 文档结点
    • 文本结点
    • 函数结点
      1. 行函数结点
      2. 块函数结点
    • 输出结点

其中,输出结点是输出一个对象的内容,因此由对象表达式与变量调节器结点组成,对象表达式主要是邮字符串表达式、NULL表达式与变量表达式组成

  • 输出结点
    • 对象表达式
      1. 字符串表达式
      2. NULL表达式
      3. 变量表达式
    • 变量调节器结点

变量表达式又包含相关的List或者Map扩展信息 除此外,表达式结点还有浮点表达式结点、整数表达式结点与布尔表达式结点,只要是表达式结点对象,就支持在压栈过程中对这三种数值之间进行转化。

执行优化

smarty4j的块函数结点将整个文档分隔成代码块,分析每个代码块是否有变量的回写操作,如assign等。如果不存在,则会在栈内存中自动缓存相关的节点读取操作,第二次需要读取时,是直接从栈内存中读取,减少了分析和从容器中提取数据的问题。特别是针对循环操作时缓存指针变量,能大幅度提高执行的速度。 smarty4j会自动识别条件分支中的“短路”位置,一个布尔表达式结点的真或假的结果成立后,可以直接跳到if等函数指定的出口点,而不需要逐级去验证,对于复杂的布尔表达式,能小幅度的提高执行速度。

功能扩展

smarty4j的语法扩展分为几个层次:

1.直接用java代码实现新的函数与变量调节器

继承org.lilystudio.smarty4j.statement包下的AbstractLineFunction,AbstractBlockFunction,AbstractCustomModifier三个类可以分别实现单行函数、区块函数与变量调节器的java代码实现,新的类名以$符号开头,放置在org.lilystudio.smarty4j.statement.function与org.lilystudio.smarty4j.statement.modifier包下可以被直接引用,否则需要在配置文件中定义函数的自动搜索包。这种方式面向普通的java开发人员

2.实现自己特点的函数语法

继承org.lilystudio.smarty4j.statement包下的AbstractFunction、AbstractModifier或第一点中提供的接口,通过重新实现syntax或process方法来实现函数特有的语法或特定的处理方式,如if,literal,break等均是代表。使用非标准的smarty参数语法应当慎重,一般由架构人员来评估后由普通java开发人员进行。

3.实现自己的函数与变量调节器语法转换节点 

继承org.lilystudio.smarty4j.statement包下的AbstractFunction或AbstractModifier,或者实现IFunction,IBlockFunction,IModifier接口,通过重写parse方法来生成jvm汇编代码。这种方式需要对jvm汇编了解程度较高,而且需要经常对每一个分支的测试才能使用,否则会出现虚拟机的类加载异常或者是jvm汇编校验异常。

本文地址:https://www.codercto.com/soft/d/13066.html

UNIX环境高级编程(第3版)

UNIX环境高级编程(第3版)

史蒂文斯 (W.Richard Stevens)、拉戈 (Stephen A.Rago) / 戚正伟、张亚英、尤晋元 / 人民邮电出版社 / 2014-6-1 / 128.00元

《UNIX环境高级编程(第3版)》是被誉为UNIX编程“圣经”的Advanced Programming in the UNIX Environment一书的第3版。在本书第2版出版后的8年中,UNIX行业发生了巨大的变化,特别是影响UNIX编程接口的有关标准变化很大。本书在保持前一版风格的基础上,根据最新的标准对内容进行了修订和增补,反映了最新的技术发展。书中除了介绍UNIX文件和目录、标准I/......一起来看看 《UNIX环境高级编程(第3版)》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试