简介
Velocity 历史悠久的免费java模板引擎。官网:http://velocity.apache.org/
Velocity是基于Java的模板引擎,这是一种简单而强大的开发工具,可让您轻松创建和呈现用于格式化和显示数据的文档
*.vm :Velocity 模板文件
VTL : Velocity Template Language
使用Velocity模板引擎时的需要关注两部分:Velocity模板和Java代码调用。
Velocity模板由VTL和引擎上下文对象构成;
Java代码调用部分则负责初始Velocity引擎、构建引擎上下文对象、加载Velocity模板和启动模版渲染。
而Velocity模板与Java代码调用部分通信的纽带就是引擎上下文对象了。
Velocity被移植到不同的平台上,如.Net的NVelocity和js的Velocity.js,虽然各平台在使用和实现上略有差别,但大部分语法和引擎核心的实现是一致的,因此学习成本降低不少哦。
版本要求
Velocity2.1以上版本要求jdk1.8以上
Velocity2.2的maven 依赖
<dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.2</version> </dependency> <dependency> <groupId>org.apache.velocity.tools</groupId> <artifactId>velocity-tools-generic</artifactId> <version>3.0</version> </dependency> <dependency> <groupId>org.apache.velocity.tools</groupId> <artifactId>velocity-tools-view</artifactId> <version>3.0</version> </dependency> <dependency> <groupId>org.apache.velocity.tools</groupId> <artifactId>velocity-tools-view-jsp</artifactId> <version>3.0</version> </dependency>
其它所有版本官方下载地址:http://archive.apache.org/dist/velocity/engine/
Velocity1.7要求jdk1.4版本以上。官网地址:http://velocity.apache.org/engine/1.7/
1.7 api doc地址:https://tool.oschina.net/apidocs/apidoc?api=velocity-1.7
快速入门
Example2.java
import java.io.StringWriter;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.VelocityContext;
public class Example2
{
public static void main( String args[] )
{
/* 首先,初始化运行时引擎,使用默认的配置 */
Velocity.init();
/* 创建Context对象,然后把数据放进去 */
VelocityContext context = new VelocityContext();
context.put("name", "Velocity");
context.put("project", "Jakarta");
/* 渲染模板 */
StringWriter w = new StringWriter();
Velocity.mergeTemplate("testtemplate.vm", context, w );
System.out.println(" template : " + w );
/* 渲染字符串 */
String s = "We are using $project $name to render this.";
w = new StringWriter();
Velocity.evaluate( context, w, "mystring", s );
System.out.println(" string : " + w );
}
}
在运行程序之前,我们需要把模板文件testtemplate.vm放到与程序相同的目录下(因为我们使用默认配置,默认配置中指定的模板加载路径就是程序的当前目录)
testtemplate.vm
Hi! This $name from the $project project.
总结
首先,你还是需要先创建一个context,放进你需要的数据。
然后合并内容
Velocity的Java编码
以下内容转自:https://www.cnblogs.com/fsjohnhuang/p/4112866.html 肥仔John
模板与宿主环境通信
模板指的是使用VTL编写的Velocity模板,宿主环境指的是Java代码调用部分。而两者通信的纽带就是引擎上下文对象( VelocityContext实例 ),下面是常用的 VelocityContext实例 方法。
// 构造函数,入参为上下文的键值对集
VelocityContext(Map context)
// 添加上下文的键值对
Object put(String key, Object value)
// 从上下文获取指定键的值
Object get(String key)
// 检查上下文中是否存在指定的键值对
boolean containsKey(Object key)
// 获取所有键
Object[] getKeys()
// 移除指定键
Object remove(Object key)
// 获取上下文链中邻近的上下文对象
Context getChainedContext()
宿主环境向模板传值
// 1. 通过构造函数传值
HashMap<String, String> baseCtx = new HashMap<String, String>();
baseCtx.put("version", "1");
VelocityContext ctx = new VelocityContext(baseCtx);
// 2. 通过put传值
ctx.put("author", "fsjohnhuang");
注意键值对中值的数据类型为
Integer、Long等简单数据类型的装箱类型;
String类型;
Object子类;
Object[] 数组类型,从1.6开始Velocity将数组类型视为 java.util.List 类型看待,因此模板中可调用 size() 、 get(intindex) 和 isEmpty() 的变量方法;
java.util.Collection子类;
java.util.Map子类;
java.util.Iterator对象;
java.util.Enumer