1. 什么是Velocity?
Velocity是一个基于Java的模板引擎,允许网页设计者引用Java代码中定义的方法。Web设计师可以和Java程序员一起根据MVC模型开发网站,也就是说页面设计师可以专注于创建一个良好的网站,而程序员可以专注于编写一流的代码。Velocity把Java代码从网页中分离出来,使网站在长期运行中更易于维护,并为JSP或PHP提供了一个可行的替代方案。
Velocity可以用于从模板生成网页、SQL和其他输出,既可以作为生成源代码和报告的独立实用程序使用,也可以作为其他系统的集成组件使用。
2. 应用场景
1)Web应用程序:作为应用程序视图,展示数据。
2)源代码生成:Velocity可用于基于模板生成java代码。
3)自动电子邮件:网站注册,认证等的电子邮件模板。
4)网页静态化:基于Velocity模板,生成静态页面。
3. Velocity组成
Velocity主要分为app、context、runtime和一些辅助util几个部分。
1)app模块:主要封装了一些接口,暴露给使用者。主要有两个类Velocity和VelocityEngine;
2)context模块:主要封装了模板渲染需要的变量;
3)runtime模块:整个Velocity的核心模块,将加载的模板解析成语法树,调用方法mergeTemplate时会渲染整棵树,并输出最终的渲染结果。
4)RuntimeInstance类为整个Velocity渲染提供了一个单例模式,拿到这个实例就可以完成渲染过程了。
在线Mud商店实例:
<html>
<body>
Hello $customer.Name!
<table>
#foreach( $mud in $mudsOnSpecial )
<tr>
<td>
$flogger.getPromo( $mud )
</td>
</tr>
#end
</table>
</body>
</html>
4. Velocity模板语言(VTL)简单说明
VTL提供最简单的方式把动态内容到网页中。所有的VTL语句以#字符加一个指令开始。当用户请求网页时,模板引擎会从网页中查找所有的#字符,然后确定哪些标了VTL语句的开始,那些#字符与VTL无关。变量以$开头,字符串值用引号括起来。单引号确保引用的值按原样分配给引用,双引号允许进行插值。
#set($a = "Velocity")
5. Velocity的Hello World实例
一旦变量分配了值,那么在HTML文档中都可以引用了。
<html>
<body>
#set( $foo = "Velocity" )
Hello $foo World!
</body>
</html>
6. 注释
单行注释用##,多行注释使用#*和*#。
7. 引用
VTL中有多种类型的引用,包括变量、属性和方法。标识符必须以字母开头,余下的可以是数字、字母或下划线。引用语句就是对引擎上下文对象中的属性进行操作。语法方面分为常规语法($属性)和正规语法(${属性})。
8. 可选值
My name is ${name|’John Dow’} ##If $name is null, empty, false or zero, then the ‘John Dow’will be displayed.
9. 指令
指令主要用来定义重用模块、引入外部资源、流程控制。
#set指令用来设置值。#if/#ElseIf/Else指令用来做条件判断。#foreach指令用于循环,#include指令用来引入文件,#parse指令解析文件,#evaluate指令用于做动态计算,#define指令用力啊定义VTL引用块。#macro指令宏定义。
10. VelocityTools介绍
Velocity Tools是Velocity模板引擎的一个子项目,分为两个部分GenericTools和Velocity View,用于将Velocity与Web开发环境集成的工具包。
GenericTools是一组类,提供在标准Velocity项目中使用工具的基础结构,以及在通用Velocity模板中使用的一组工具。Velocity View包括所有的通用工具结构和在web应用程序的视图层中使用Velocity的专用工具,其中包括用于处理Velocity模板请求的VelocityViewServlet或VelocityLayoutServlet,用于在JSP中嵌入Velocity的Velocity的VelocityViewTag。
11. VelocityView使用
VelocityView包含所有GenericTools并添加了用于在Web应用程序的视图层中的使用Velocity的基础结构和专用工具。其中包括处理Velocity模板请求的VelocityViewServlet和VelocityLayoutServlet,以及用于把Velocity嵌入JSP中的VelocityViewTag。