1 Velocity
Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。 当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只 关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。Velocity将java代码从web页面中分离出来,这样为web站点的长期维护提 供了便利,同时也为我们在JSP和PHP之外又提供了一种可选的方案。 Velocity的能力远不止web站点开发这个领域,例如,它可以从模板(template)产生SQL和PostScript、XML,它也可以被当 作一个独立工具来产生源代码和报告,或者作为其他系统的集成组件使用。Velocity也可以为Turbine web开发架构提供模板服务(template service)。Velocity+Turbine提供一个模板服务的方式允许一个web应用以一个真正的MVC模型进行开发。
2 生成代码实例
2.1 添加相关工具包
如图所示:
2.2 执行代码
package cn.winjoys.velocity;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
public class VelocityUtil {
/**
* Document Start
*
* Document End
* 2009-11-19 下午03:46:36
* 作者:梦中千万里
*/
public void generator() {
try {
Velocity.init("src/velocity.properties");
VelocityContext context = new VelocityContext();
context.put("list", getDatas());
context.put("author", "梦中千万里");
context.put("date", new Date());
Template template = Velocity.getTemplate("template/simple.vm");
// out
BufferedWriter writer = writer = new BufferedWriter(
new OutputStreamWriter(System.out));
if (template != null)
template.merge(context, writer);
writer.flush();
writer.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* Document Start
*
* Document End
* 2009-11-19 下午03:46:39
* 作者:梦中千万里
* @return
*/
public List getDatas() {
List<Object> list = new ArrayList<Object>();
list.add("First Object");
list.add(new Date());
list.add(100);
return list;
}
}
2.3 模版文件
The first demo[$author][$date]
#foreach( $name in $list )
the $name is $name.class!
#end
2.4 输出结果
The first demo[梦中千万里][Thu Nov 19 16:09:53 CST 2009]
the First Object is class java.lang.String!
the Thu Nov 19 16:09:53 CST 2009 is class java.util.Date!
the 100 is class java.lang.Integer!
3 Velocity Template Language (VTL)
3.1 变量
$ [ ! ][ { ][ a..z, A..Z ][ a..z, A..Z, 0..9, -, _ ][ } ]
例如
简化形式:$author
完整形式:${author}
3.2 属性
$ [ { ][ a..z, A..Z ][ a..z, A..Z, 0..9, -, _ ]* .[a..z, A..Z ][ a..z, A-Z, 0..9, -, _ ]* [ } ]
例如
$name.class
3.3 方法
$ [ { ][ a..z, A..Z ][ a..z, A..Z, 0..9, -, _ ]* .[ a..z, A..Z ][ a..z, A..Z, 0..9, -, _ ]*( [ optional parameter list... ] ) [ } ]
例如
$name.getClass()
3.4 设置
# [ { ] set [ } ] ( $ref = [ ", ' ]arg[ ", ' ] )
例如
• Variable reference: #set( $monkey = $bill )
• String literal: #set( $monkey.Friend = 'monica' )
• Property reference: #set( $monkey.Blame = $whitehouse.Leak )
• Method reference: #set( $monkey.Plan = $spindoctor.weave($web) )
• Number literal: #set( $monkey.Number = 123 )
• Range operator: #set( $monkey.Numbers = [1..3] )
• Object list: #set( $monkey.Say = ["Not", $my, "fault"] )
• Object map: #set( $monkey.Map = {"banana" : "good", "roast beef" : "bad"})
3.5 条件语句
# [ { ] if [ } ] ( [condition] ) [output] [ # [ { ] elseif [ } ] ( [condition] ) [output] ]* [ # [ { ] else [ } ] [output] ] # [ { ] end [ } ]
Operator Name Symbol Alternative Symbol Example
Equals Number == eq #if( $foo == 42 )
Equals String == eq #if( $foo == "bar" )
Object Equivalence == eq #if( $foo == $bar )
Not Equals != ne #if( $foo != $bar )
Greater Than > gt #if( $foo > 42 )
Less Than < lt #if( $foo < 42 )
Greater Than or Equal To >= ge #if( $foo >= 42 )
Less Than or Equal To <= le #if( $foo <= 42 )
Boolean NOT ! not #if( !$foo
3.6 循环语句
# [ { ] foreach [ } ] ( $ref in arg ) statement # [ { ] end [ } ]
例如
#foreach( $name in $list )
the $name is $name.getClass()!
#end
3.7 引用文件
# [ { ] include [ } ] ( arg[ arg2 ... argn] )
例如
#include("template/temp.txt")
说明
将文件temp.txt里的内容拷贝到生成的代码中,但此时不解析执行。
# [ { ] parse [ } ] ( arg )
例如
#parse( "lecorbusier.vm" )
说明
将文件temp.txt里的内容拷贝到生成的代码中,但此时解析执行。
3.8 停止模版引擎
# [ { ] stop [ } ]
主要是用于调试
例如
The first demo[${author}][$date]
#stop
#foreach( $name in $list )
the $name is $name.getClass()!
#end
#include("template/temp.txt")
不会执行
#foreach( $name in $list )
the $name is $name.getClass()!
#end
但会执行
#include("template/temp.txt")
3.9 计算
# [ { ] evaluate [ } ] ( arg )
例如
#evaluate( 'string with VTL #if(true)will be displayed#end' )
将执行字符串
3.10 定义索引块
# [ { ] define [ } ] ( $ref ) statement # [ { ] end [ } ]
例如
#define( $hello ) Hello $who #end #set( $who = "World!") $hello ## displays Hello World!
3.11 定义宏
# [ { ] macro [ } ] ( vmname $arg1 [ $arg2 $arg3 ... $argn ] ) [ VM VTL code... ] # [ { ] #end [ } ]
3.12 注释
## This is a comment.
多行采用如下形式
#*
This is a multiline comment.
This is the second line
*#
4 资源
【1】http://velocity.apache.org/index.html
- 大小: 106.8 KB
分享到:
相关推荐
### Apache Velocity概述与核心特性 #### 一、Apache Velocity简介 Apache Velocity 是一款基于 Java 的模板引擎,由 Apache 软件基金会...对于想要深入了解 Velocity 的开发者来说,这本书是非常有价值的参考资料。
总结,Velocity 是一个强大的模板引擎,通过 VTL 提供了高效、安全、易于维护的解决方案,使得开发者能够轻松地将动态数据融入静态页面,提升Web应用的用户体验。熟悉 Velocity 的使用和 VTL 语法对于任何 Java Web ...
### Velocity学习资料详解 #### 一、Velocity简介与特性 Velocity是一种基于Java的模板引擎,它的设计目的是使得非程序员能够轻松地使用模板语言来引用Java代码定义的对象。相较于JSP和其他视图技术,Velocity在可...
- Apache官方文档: 提供了详细的API参考和教程,是学习Velocity的基础资料。 - 示例代码: 通过实践编写模板和上下文管理,可以更好地理解Velocity的工作原理。 - 社区讨论: 如Stack Overflow等平台,可以找到各种...
Apache社区为Velocity 1.7提供了丰富的文档资料,包括用户指南、开发者手册和API参考,方便用户学习和使用。此外,活跃的社区支持也确保了用户在遇到问题时能得到及时的帮助。 8. **应用场景** Velocity广泛应用...
【Vue.js核心技术详解】 Vue.js是一款轻量级的前端JavaScript框架,因其易学易用、高性能和组件化特性,被广泛应用于现代Web开发。...配合提供的代码示例、课件资料和笔记总结,学习效果将更加显著。
大数据的基本概念是指通过当前主流软件工具无法在合理时间内达到撷取、管理、处理并整理的巨量资料。这些数据不仅包含标准结构化数据,也包括非结构化数据,如用户评论等。 大数据的目的不是告诉我们“为什么”,...
在大数据时代,高校学院资料室的建设与管理...总结,大数据时代对高校学院资料室提出了更高的要求,资料室需不断适应变化,通过技术创新、服务模式改革和管理优化,提升自身的价值,更好地服务于师生,推动学术进步。
关于大数据 大数据是什么 大数据(big data),或称巨量资料,指的是所涉及的资料量规模巨大到无法透过目前主流软件工具, 在合理时间内达到撷取、管理、处理、并整理成为帮助企业经营决策更积极目的的资讯 。...
总结而言,大数据培训资料从定义和行业趋势、支撑技术、特征和应用场景、华为解决方案等多个维度对大数据进行了全面的介绍。这些内容对于希望深入理解和掌握大数据技术的个人和机构来说,是极具参考价值的学习材料。...
本资料集“bigdata大数据学习与经验总结”旨在分享关于大数据技术的学习路径、实践经验和应用案例,帮助读者深入理解大数据的核心概念、技术栈及其在实际业务中的应用。 首先,大数据的基础概念包括3V模型——...
本文是关于2020年南开大学人工智能导论课程的期末复习总结...总结所述,本复习资料详尽地梳理了人工智能的基础概念、硬件原理、搜索算法以及具体应用,对于理解和掌握人工智能的核心思想非常有帮助,适合期末复习使用。
大数据的定义是指涉及的资料量规模巨大到无法透过目前主流软件工具,在合理时间内达到撷取、管理、处理、并整理成为帮助企业经营决策更积极目的的资讯。大数据的4V特点是Volume(大量)、Velocity(高速率)、...
- **特征**:Volume(大量)、Velocity(高速)、Variety(多样)、Value(价值)、Veracity(真实性)。 #### 4.2 大数据技术栈 - **Hadoop生态系统**:HDFS、MapReduce、Spark等。 - **NoSQL数据库**:MongoDB、...
总结来说,"JAVA 项目文档相关资料"的主题涵盖了配置库管理和Struts2框架的深入学习,这些都是Java Web开发中的重要技能。通过学习和实践,开发者可以提升项目管理能力,掌握复杂系统的设计和实现,以及更好地理解和...
大数据是指处理和分析的资料量极其庞大,超出了传统软件工具的能力范围,需要在合理的时间内完成数据的采集、管理和处理,并转化为有助于企业决策的有价值信息。大数据不仅涵盖结构化数据,如交易记录、账户信息,还...
这篇资料涵盖了多个领域的知识点,主要涉及大数据、互联网时代下的国家治理、电子政务、信息安全、以及“互联网+”对农村经济的影响。以下是对这些知识点的详细解释: 1. **大数据概念**:大数据不仅仅是数据量的...