代码生成框架Velocity

简介: 代码生成框架Velocity Velocity是一个基于Java的模板引擎,用户可以使用模板语言VTL来引用由Java代码定义的对象。 Velocity通常可以作为动态生成页面而广泛使用,还是一种功能强大的代码生成工具。

代码生成框架Velocity


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

## test  assign
# set ($ name  =   " gan.shu.man " )
Employee name: 
$ gan . shu . man

## test condition
# if ($ name  ==   " gan.shu.man " )
$ name: very good!!
# else
$ name: sorry!!
# end

Product information
## test circular
# foreach ($ product in  $ productList )
$ product . Name     $$ product . Price
# end

## test program  assign
Total Price: 
$$ totalPrice

 

(2)HelloWorldVTL.java

import  java.io.StringWriter;
import  java.io.Writer;
import  java.util.ArrayList;
import  java.util.Collection;
import  java.util.Iterator;

import  org.apache.velocity.Template;
import  org.apache.velocity.VelocityContext;
import  org.apache.velocity.app.Velocity;
public   class  HelloWorldVTL  {
 
public static void main(String[] args) throws Exception{
  Velocity.init();
  Template template 
= Velocity.getTemplate("./src/helloworld.vm");
  VelocityContext ctx 
= new VelocityContext();
  Collection products 
= new ArrayList();
  products.add(
new Product("Product 1",12.99));
  products.add(
new Product("Product 2",13.99));
  products.add(
new Product("Product 3",11.99));
  ctx.put(
"productList", products);
  Iterator itr 
= products.iterator();
  
double total = 0.00;
  
while(itr.hasNext()){
   Product p 
= (Product)itr.next();
   total
+=p.getPrice();
  }

  ctx.put(
"totalPrice"new Double(total));
  Writer writer 
= new StringWriter();
  template.merge(ctx, writer);
  System.out.println(writer.toString());
 }

}


 

(3)Product.java

public   class  Product  {
 
private String name;
 
private double price;
 
public Product(String name, double price) {
  
super();
  
this.name = name;
  
this.price = price;
 }

 
public String getName() {
  
return name;
 }

 
public void setName(String name) {
  
this.name = name;
 }

 
public double getPrice() {
  
return price;
 }

 
public void setPrice(double price) {
  
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)替换模板中的值生成代码。
通过模板生成代码是比较好的选择,模板在某种意义上来说就是配置文件的一种,当生成文件内容修改后,用户不需要修改源程序,只需要修改模板文件即可,提高了代码的可维护性。 

目录
相关文章
|
8月前
|
Java
SpringMVC 中的视图如何使用 Velocity
SpringMVC 中的视图如何使用 Velocity
|
9月前
|
XML Java Maven
探索Velocity模板引擎:灵活的模板生成工具
在现代的应用开发中,生成动态内容的需求非常常见。Velocity模板引擎作为一款灵活的模板生成工具,可以帮助我们将数据与模板结合,生成各种文本、HTML、XML等格式的内容。本文将深入探讨Velocity的基本概念、特点,以及如何在实际应用中使用它进行模板生成。
212 0
|
SQL Java 关系型数据库
Querydsl-JPA 框架
Querydsl-JPA 框架
1869 1
|
前端开发 JavaScript
前端框架:第二章:Layui(类UI ) 框架:关于2.2.5版本没有rate模块的解决方案
前端框架:第二章:Layui(类UI ) 框架:关于2.2.5版本没有rate模块的解决方案
182 0
前端框架:第二章:Layui(类UI ) 框架:关于2.2.5版本没有rate模块的解决方案
|
Java 索引
模板引擎Velocity
Velocity是一个基于Java的模板引擎,可以通过特定的语法获取在java对象的数据 , 填充到模板中,从而实现界面和java代码的分离 !
|
Rust 自然语言处理 算法
【算法】1678. 设计 Goal 解析器(多语言实现)
请你设计一个可以解释字符串 command 的 Goal 解析器 。command 由 "G"、"()" 和/或 "(al)" 按某种顺序组成。Goal 解析器会将 "G" 解释为字符串 "G"、"()" 解释为字符串 "o" ,"(al)" 解释为字符串 "al" 。然后,按原顺序将经解释得到的字符串连接成一个字符串。 给你字符串 command ,返回 Goal 解析器 对 command 的解释结果。
【算法】1678. 设计 Goal 解析器(多语言实现)