### 什么是“ZML”?
---------------------------------------
ZML(Zhiqim Markup Language)即“知启蒙标记语言”,是知启蒙定义的、类似于Java & Javascript语法的语句和表达式,通常和XML/HTML混编在一起形成的一种新的标记语言。ZML力求简单易用,目前支持常用的十二种标记语句和五十种表达式,在知启蒙框架体系中被用来代替JSP。
### 什么是“ZML引擎”?
---------------------------------------
ZML引擎(ZhiqimZML)即“知启蒙标识语言引擎”,是实现ZML规范的引擎系统。支持两种ZML加载方式(按文件目录和按类路径)、能够在ZML文件改动后立即发现并在触发时重新加载、并提供详细的“表达式合并运算优先级”、“变量多维作用域”和“无障碍访问Java代码”,以及设置上下文作用域的配置模板、对模板进行缓存等特性。
### “ZML引擎”有哪些优点?
---------------------------------------
1、ZhiqimZML仅依赖JDK1.7+和ZhiqimKernel。15年的坚持,值得信赖。
2、ZhiqimZML支持十二种语句和五十种表达式基本覆盖业务操作,是[知启蒙WEB容器](https://gitee.com/zhiqim/zhiqim_httpd)的重要组成部分,在ZhiqimDK家族中占据非常重要的位置。
3、对比国外模板引擎Freemarker和Velocity,ZhiqimZML更有优势,结合[知启蒙微内核](https://gitee.com/zhiqim/zhiqim_kernel)的大量工具类(如Strings/Validatest),使得ZhiqimZML可无障碍访问Java代码,称之为Java的标识语言都不为过。
4、最后**自荐一下**,比Spring更轻量、更齐全的J2EE框架 **zhiqim** 正式开源啦,不服来试用。
### 最简单的ZML引擎使用方法
---------------------------------------
|
1、准备好一段符合ZML规格的字符串,和一个变量表,即可解析出结果。 2、支持全局变量表中@AnAlias注解别名表和预定义Java类名的静态变量和静态方法调用。 3、详细见org.zhiqim.zml.Zmls静态类中的方法,如下提供的parse方法。 |
|
|
1、支持对文件目录/类路径加载配置定义的变量和函数到上下文变量表中,支持根据path查找ZML文件加载。 2、支持多个组件加载器,依次查找组件配置模板中定义的变量和函数到上下文变量表,和根据path查找的ZML文件加载。 3、支持自定义设置全局变量。 4、支持对ZML文件监视,有变动立即知晓,并在被触发时加载文件,如是配置模板会回调通知。 5、支持对ZML文件缓存,并提供缓存参数maxIdleTime/maxKeepTime。 |
||
| 参数 | 参数类型 | 描述 |
| notice | ZmlVarNotice | 设置模板变量变动通知,当/conf/config.zml有变动并触发时回调doUpdate方法 |
| encoding | String | 模板加载编码 |
| maxIdleTime | int | 模板最大空闲时长,建议1小时 |
| maxKeepTime | int | 模板最大保持时长,建议24小时 |
| isAscQuery | boolean | 当有组件配置模板时,是否按顺序查找 |
| patterns | String | 模板匹配模式,默认*.zml,*.htm |
| loader | ClassZmlLoader FileZmlLoader |
设置根配置模板加载器,类路径/目录 |
| cLoaderMap | ClassZmlLoader | 组件配置模板加载器,类路径/目录,支持多个, 通过addComponentZmlLoader()添加 |
| globalMap | HashMap | 全局变量表,通过addGlobalVariable添加 |
| ``` //先创建ZML引擎,可以保存起来 ZmlEngine engine = new ZmlEngine(); engine.setFileZmlLoader(new File("./resource")); engine.setConfigZml("/conf/config.zml"); //调用和解析ZML文件 Zml zml = engine.getZml("/zml/abc.zml"); HashMapSO variableMap = new HashMapSO(); variableMap.put("abc", "知启蒙"); variableMap.put("def", "标识语言"); variableMap.put("isAbc", false); String result = Zmls.parese(zml, variableMap); ``` | ||