[转载]
http://www.ibm.com/developerworks/cn/java/j-lo-velocity1/
velocity官网下载所需要的jar
http://velocity.apache.org/download.cgi?cm_mc_uid=31686471658114647884426&cm_mc_sid_50200000=1464792844
Velocity 模板引擎介绍
1.Web 应用:开发者在不使用 JSP 的情况下,可以用 Velocity 让 HTML 具有动态内容的特性。
2. 源代码生成:Velocity 可以被用来生成 Java 代码、SQL 或者 PostScript。有很多开源和商业开发的软件是使用 Velocity 来开发的。
3. 自动 Email:很多软件的用户注册、密码提醒或者报表都是使用 Velocity 来自动生成的。使用 Velocity 可以在文本文件里面生成邮件内容,而不是在 Java 代码中拼接字符串。
4. 转换 xml:Velocity 提供一个叫 Anakia 的 ant 任务,可以读取 XML 文件并让它能够被 Velocity 模板读取。一个比较普遍的应用是将 xdoc 文档转换成带样式的 HTML 文件。
Hello Velocity
和学习所有新的语言或者框架的顺序一样,我们从 Hello Velocity 开始学习。首先在 Velocity 的官网上下载最新的发布包,之后使用 Eclipse 建立普通的 Java 项目。引入解压包中的 velocity-1.7.jar 和 lib 文件夹下面的 jar 包。这样我们就可以在项目中使用 Velocity 了。
在做完上面的准备工作之后,就可以新建一个叫 HelloVelocity 的类,代码如下:
import org.apache.velocity.Template; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.VelocityEngine; import org.apache.velocity.runtime.RuntimeConstants; import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader; import java.io.StringWriter; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * Created by zhuhw on 2016/6/1. */ public class HelloVelocity { public static void main(String[] args) { //首先 new 了一个 VelocityEngine 类 VelocityEngine ve = new VelocityEngine(); //这个类设置了 Velocity 使用的一些配置,在初始化引擎之后就可以读取 hellovelocity.vm 这个模板生成的 Template 这个类 ve.setProperty(RuntimeConstants.RESOURCE_LOADER,"classpath"); ve.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName()); ve.init(); Template t = ve.getTemplate("hellovelocity.vm"); //之后的 VelocityContext 类是配置 Velocity 模板读取的内容 VelocityContext ctx = new VelocityContext(); ctx.put("name", "velocity"); ctx.put("date", (new Date()).toString()); List temp = new ArrayList(); temp.add("1"); temp.add("2"); ctx.put("list", temp); StringWriter sw = new StringWriter(); t.merge(ctx, sw); /* * 这个 context 可以存入任意类型的对象或者变量,让 template 来读取。 * 这个操作就像是在使用 JSP 开发时,往 request 里面放入 key-value,让 JSP 读取一样。 * */ System.out.println(sw.toString()); //接下来就是写 hellovelocity.vm 文件了,这个文件实际定义了 Velocity 的输出内容和格式 } }
在 HelloVelocity 的代码中,首先 new 了一个 VelocityEngine 类,这个类设置了 Velocity 使用的一些配置,在初始化引擎之后就可以读取 hellovelocity.vm 这个模板生成的 Template 这个类。之后的 VelocityContext 类是配置 Velocity 模板读取的内容。这个 context 可以存入任意类型的对象或者变量,让 template 来读取。这个操作就像是在使用 JSP 开发时,往 request 里面放入 key-value,让 JSP 读取一样。
接下来就是写 hellovelocity.vm 文件了,这个文件实际定义了 Velocity 的输出内容和格式。hellovelocity.vm 的内容如下:
清单 2. Hellovelocity.vm
#set( $iAm = "good!" ) Welcome $name to velocity.com today is $date. #macro(sayHello $name) hello $name #end #sayHello("velocity") #foreach ($i in $list) $i #end $iAm
运行结果
Welcome velocity to velocity.com today is Wed Jun 01 22:44:26 CST 2016. hello velocity 1 2 good!
在输出结果中我们可以看到,$name、$date 都被替换成了在 HelloVelocity.java 里面定义的变量,在 foreach 语句里面遍历了 list 的每一个元素,并打印出来。而$iAmVariable 则是在页面中使用 #set 定义的变量。
基本模板语言语法使用
在 hellovelocity.vm 里面可以看到很多以 # 和$符开头的内容,这些都是 Velocity 的语法。在 Velocity 中所有的关键字都是以 # 开头的,而所有的变量则是以$开头。Velocity 的语法类似于 JSP 中的 JSTL,甚至可以定义类似于函数的宏,下面来看看具体的语法规则。
一、变量
和我们所熟知的其他编程语言一样,Velocity 也可以在模板文件中有变量的概念。
1. 变量定义
#set($name =“velocity”)
等号后面的字符串 Velocity 引擎将重新解析,例如出现以$开始的字符串时,将做变量的替换。
#set($hello =“hello $name”)
上面的这个等式将会给$hello 赋值为“hello velocity”
2. 变量的使用
在模板文件中使用$name 或者${name} 来使用定义的变量。推荐使用${name} 这种格式,因为在模板中同时可能定义了类似$name 和$names 的两个变量,如果不选用大括号的话,引擎就没有办法正确识别$names 这个变量。
对于一个复杂对象类型的变量,例如$person,可以使用${person.name} 来访问 person 的 name 属性。值得注意的是,这里的${person.name} 并不是直接访问 person 的 name 属性,而是访问 person 的 getName() 方法,所以${person.name} 和${person.getName()} 是一样的。
3. 变量赋值
在第一小点中,定义了一个变量,同时给这个变量赋了值。对于 Velocity 来说,变量是弱数据类型的,可以在赋了一个 String 给变量之后再赋一个数字或者数组给它。可以将以下六种数据类型赋给一个 Velocity 变量:变量引用, 字面字符串, 属性引用, 方法引用, 字面数字, 数组列表。
#set($foo = $bar) #set($foo =“hello”) #set($foo.name = $bar.name) #set($foo.name = $bar.getName($arg)) #set($foo = 123) #set($foo = [“foo”,$bar])
二、循环
在 Velocity 中循环语句的语法结构如下:
#foreach($element in $list) This is $element $velocityCount #end
Velocity 引擎会将 list 中的值循环赋给 element 变量,同时会创建一个$velocityCount 的变量作为计数,从 1 开始,每次循环都会加 1.
三、条件语句
条件语句的语法如下
#if(condition) ... #elseif(condition) … #else … #end
四、关系操作符
Velocity 引擎提供了 AND、OR 和 NOT 操作符,分别对应&&、||和! 例如:
#if($foo && $bar) #end
五、宏
Velocity 中的宏可以理解为函数定义。定义的语法如下:
#macro(macroName arg1 arg2 …) ... #end
调用这个宏的语法是:
#macroName(arg1 arg2 …)
这里的参数之间使用空格隔开,下面是定义和使用 Velocity 宏的例子:
#macro(sayHello $name) hello $name #end #sayHello(“velocity”)
输出的结果为 hello velocity
六、#parse 和 #include
#parse 和 #include 指令的功能都是在外部引用文件,而两者的区别是,#parse 会将引用的内容当成类似于源码文件,会将内容在引入的地方进行解析,#include 是将引入文件当成资源文件,会将引入内容原封不动地以文本输出。分别看以下例子:
foo.vm 文件:
#set($name =“velocity”)
parse.vm:
#parse(“foo.vm”)
输出结果为:velocity
include.vm:
#include(“foo.vm”)
输出结果为:#set($name =“velocity”)
以上内容包含了部分 Velocity 的语法,详细的语法内容可以参考 Velocity 的官方文档。
补充:
2016/06/05
一、基本语法
1、"#"用来标识Velocity的脚本语句
,包括#set、#if 、#else、#end、#foreach、#end、#iinclude、#parse、#macro等;
2、"$"用来标识一个对象(或理解为变量);
如:$i、$msg、$TagUtil.options(...)等。
3、"{}"用来明确标识Velocity变量;
比如在页面中,页面中有一个$someonename,此时,Velocity将把someonename作为变量名,若我们程序是想在someone这 个变量的后面紧接着显示name字符,则上面的标签应该改成${someone}name。
4、"!"用来强制把不存在的变量显示为空白。
如当页面中包含$msg,如果msg对象有值,将显示msg的值,如果不存在msg对象同,则在页面中将显示$msg字符。这是我们不希望的,为了把不存 在的变量或变量值为null的对象显示为空白,则只需要在变量名前加一个“!”号即可。
相关推荐
"Velocity模板引擎技术在Java Web中的应用" Velocity模板引擎技术是Java Web开发中的一种重要技术,旨在解决Java Web页面视图和业务逻辑的耦合问题。通过使用Velocity模板引擎技术,可以将Java Web页面视图和业务...
Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎
Velocity模板引擎为Java Web开发提供了强大且灵活的功能支持。通过上述知识点的学习,我们可以了解到Velocity的基本用法,包括变量定义、循环、条件判断、格式化、国际化支持等方面的内容。这些知识点是使用Velocity...
在这个"Velocity模板引擎 v2.2.0.zip"压缩包中,包含了一个名为"使用须知.txt"的文件,可能详细介绍了如何安装、配置以及使用这个版本的Velocity。而"132688852448074316"可能是另一个相关文件,但没有具体的文件...
Java Velocity模板引擎是一种基于Apache软件基金会的开源项目,用于生成动态内容。它是Java应用程序中用于创建HTML、XML、电子邮件等静态或动态文档的强大的模板语言和库。Velocity旨在将内容展示与业务逻辑分离,使...
在实现具体的页面动态内容时,Velocity模板引擎会扫描整个页面,寻找所有的“#”字符,然后判断这些标记后面的部分是否是VTL语句。如果是,它就会执行相应的模板指令来生成最终的页面。Velocity模板引擎的这种工作...
`swing-generate`这款工具的核心功能是结合Velocity模板引擎,提供了在线定制模板的能力。这意味着用户可以自定义模板,模板中可以包含变量、控制结构和逻辑,这些在生成代码时会被相应的数据替换或执行。例如,你...
该项目是一款基于Java语言的Velocity模板引擎集成工具设计源码,包含245个文件,涵盖142个Java源文件、44个VM模板文件、24个XML配置文件、13个属性文件、8个文本文件、3个JSON文件、2个HTML文件和各1个gitignore、...
3. **Velocity模板引擎配置** - 可以通过VelocityConfigurer类配置Velocity引擎,比如设置模板路径、编码格式、缓存策略等。 - `Velocity.init()`初始化引擎,`Velocity.evaluate()`或`Velocity.mergeTemplate()`...
2. **创建Velocity上下文**:将数据模型放入Velocity Context,这是Velocity模板引擎工作的地方。 3. **加载模板**:读取模板文件并将其加载到Velocity引擎中。 4. **渲染模板**:使用上下文中的数据渲染模板,生成...
Velocity模板技术语法详细介绍,包括很详细的示例代码 1.变量………………………………………………………………………………1 2.循环………………………………………………………………………………2 3.条件语句...
Velocity 是基于Java的模板引擎,广泛应用在阿里集 体各个子公司。Velocity模板适用于大量模板使用的场景,支持复杂的逻辑运算,包含 基本数据类型、变量赋值和函数等功能。Velocity.js 支持 Node.js 和浏览器环境。...
Velocity 是一种基于 JAVA 的模板引擎,开发人员使用简单的模板语言就可以快速开发显示层,它使得显示层与程序代码分离。在 Struts2 框架中,Velocity 模板引擎可以与 Struts2 集成,实现了显示层与程序代码的分离。...
** Velocity 模板引擎概述 ** Velocity 是一个开源的Java模板引擎,它允许开发者将HTML、XML或者其他格式的文档与应用程序逻辑分离。Velocity 提供了一种简单但强大的模板语言,使得开发者可以专注于页面布局和设计...
Velocity是一款强大的Java模板引擎,由Apache软件基金会开发并维护,它是Apache Jakarta项目的一部分。 Velocity的主要设计目标是将表现层逻辑从应用逻辑中分离出来,使开发者可以专注于业务逻辑的实现,而无需关心...
Java Velocity模板引擎是一个强大的、轻量级的模板语言,它允许开发者将显示逻辑与业务逻辑分离,使得网页设计和后端代码更加独立。Velocity由Apache软件基金会开发,并广泛应用于Java Web应用中,提供动态内容生成...