代码生成框架Velocity

Velocity是一款基于Java的模板引擎,利用模板语言VTL引用Java对象,适用于动态页面生成和代码生成。本文介绍其基本用法,包括初始化模板引擎、加载模板文件、创建上下文并赋值,最终生成动态页面。

代码生成框架Velocity


Velocity是一个基于Java的模板引擎,用户可以使用模板语言VTL来引用由Java代码定义的对象。
Velocity通常可以作为动态生成页面而广泛使用,还是一种功能强大的代码生成工具。
Velocity模板类似于JSP文件,当客户端发送请求后,Velocity引擎江根据模板产生动态地页面。如果要使用Velocity生成动态页面,需要扩展VelocityServlet类来实现请求的处理,并通过handleRequest方法返回一个模板变量,Velocity会负责模板到页面的转换。
它还可以从模板产生SQL脚本、XML及Java代码等。
1)模板文件
扩展名为“.vm”,是一个文本文件。
2)Java程序
可以为VelocityServlet的子类。
例:
(1)helloworld.vm

##testassign
#set($name="gan.shu.man")
Employeename:
$gan.shu.man

##testcondition
#if($name=="gan.shu.man")
$name:verygood!!
#else
$name:sorry!!
#end

Productinformation
##testcircular
#foreach($productin$productList)
$product.Name$$product.Price
#end

##testprogramassign
TotalPrice:
$$totalPrice

(2)HelloWorldVTL.java

importjava.io.StringWriter;
importjava.io.Writer;
importjava.util.ArrayList;
importjava.util.Collection;
importjava.util.Iterator;

importorg.apache.velocity.Template;
importorg.apache.velocity.VelocityContext;
importorg.apache.velocity.app.Velocity;
publicclassHelloWorldVTL...{
publicstaticvoidmain(String[]args)throwsException...{
Velocity.init();
Templatetemplate
=Velocity.getTemplate("./src/helloworld.vm");
VelocityContextctx
=newVelocityContext();
Collectionproducts
=newArrayList();
products.add(
newProduct("Product1",12.99));
products.add(
newProduct("Product2",13.99));
products.add(
newProduct("Product3",11.99));
ctx.put(
"productList",products);
Iteratoritr
=products.iterator();
doubletotal=0.00;
while(itr.hasNext())...{
Productp
=(Product)itr.next();
total
+=p.getPrice();
}

ctx.put(
"totalPrice",newDouble(total));
Writerwriter
=newStringWriter();
template.merge(ctx,writer);
System.out.println(writer.toString());
}

}


(3)Product.java

publicclassProduct...{
privateStringname;
privatedoubleprice;
publicProduct(Stringname,doubleprice)...{
super();
this.name=name;
this.price=price;
}

publicStringgetName()...{
returnname;
}

publicvoidsetName(Stringname)...{
this.name=name;
}

publicdoublegetPrice()...{
returnprice;
}

publicvoidsetPrice(doubleprice)...{
this.price=price;
}

}

输出:
2008-3-10 2:45:12 org.apache.velocity.runtime.log.JdkLogChute log
信息: FileResourceLoader : adding path '.'
2008-3-10 2:45:12 org.apache.velocity.runtime.log.JdkLogChute log
信息: Null reference [template './src/helloworld.vm', line 3, column 16] : $gan.shu.man cannot be resolved.
Employee name: $gan.shu.man

gan.shu.man: very good!!

Product information
Product 1 $12.99
Product 2 $13.99
Product 3 $11.99

Total Price: $38.97

3)处理流程:
使用Velocity生成过程如下:
(1)初始化模板引擎;
(2)加载模板文件;
(3)创建模板上下文;
(4)给模板变量赋值;
(5)替换模板中的值生成代码。
通过模板生成代码是比较好的选择,模板在某种意义上来说就是配置文件的一种,当生成文件内容修改后,用户不需要修改源程序,只需要修改模板文件即可,提高了代码的可维护性。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值