Velocity is a Java-based template engine. It permits anyone to use a simple yet powerful template language to reference objects defined in Java code.
译文:Velocity是一个基于Java的模板引擎。它允许任何人使用简单而强大的模板语言来引用Java代码中定义的对象。
工作原理:
输出:模板字符串 + 模板数据
=> 模板引擎 =>
输出:字符串
文档
- https://velocity.apache.org/engine/2.3/developer-guide.html
- https://velocity.apache.org/engine/2.3/user-guide.html
文件结构
├── pom.xml
└── src
└── main
├── java
│ └── com
│ └── example
│ └── demo
│ └── Demo.java
└── resources
└── templates
└── hello.vm
依赖 pom.xml
<!--模板引擎velocity -->
<!-- https://mvnrepository.com/artifact/org.apache.velocity/velocity-engine-core -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
代码示例 Demo.java
package com.example.demo;
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.List;
public class Demo {
public static void main(String[] args) {
// 初始化模板引擎
VelocityEngine ve = new VelocityEngine();
ve.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath");
ve.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName());
ve.init();
// 模板变量
VelocityContext context = new VelocityContext();
// 变量
context.put("name", "Tom");
// list 变量
List<String> list = new ArrayList<>();
list.add("曹操");
list.add("刘备");
context.put("list", list);
// 获取模板文件
Template template = ve.getTemplate("templates/hello.vm");
// 输出
StringWriter sw = new StringWriter();
template.merge(context, sw);
System.out.println(sw.toString());
}
}
模板 hello.vm
## 这是注释,注释不会被输出
## 变量
hi ${name}
## 模板内设置变量
#set($bar = "Jack")
${bar}
## for循环
#foreach ($item in $list)
${item}
#end
## if判断
#if($name == 'Tom')
确实是Tom
#end
输出结果
hi Tom
Jack
曹操
刘备
确实是Tom
循环体$foreach中可以使用的变量
$foreach.first # 第一个元素
$foreach.last # 最后一个元素
$foreach.index # 0开始的序号
$foreach.count # 1开始的序号
参考文章