最近遇到了Velocity,需要使用到,就上网查询资料,自己写了个demo;
一、Velocity是什么?
Velocity是一个基于Java的模板引擎,其提供了一个Context容器,在java代码里面我们可以往容器中存值,然后在vm文件中使用特定的语法获取,这是velocity基本的用法;
二 、Velocity 怎么使用?下面是demo
第一步:创建项目工程,引入jar(注:这是用Velocity所需的全部jar commons-beanutils.jar commons-collections-3.1.jar commons-digester-1.8.jar velocity-1.7.jar velocity-1.7-dep.jar velocity-tools-2.0.jar)
第二 步:创建实体类User(这里我是为了测试加载实体类如何获取),也可以直接写个测试类
User类
package pojo;
public class User {
private int id;
private String user;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
这里需要注意,有个坑,就是会报加载不到文件,可以上网查询资料,我这里说下两种方式希望可以帮助到大家
1、第种方式:(Velocity的默认加载)(这里的hello.vm文件需要放置在与src同目录下的vm文件夹中)
package velocity;
import java.io.StringWriter;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
import pojo.User;
public class TestVelocity01 {
public static void main(String[] args) {
// //实例化一个VelocityEngine对象
VelocityEngine velocityEngine = new VelocityEngine();
// 实例化一个VelocityContext
VelocityContext context = new VelocityContext();
// 向VelocityContext中放入键值
context.put("username", "张三");
context.put("password", "123456789");
User u = new User();
u.setAge(18);
u.setUser("yanbinfeng");
context.put("user", u);
// 实例化一个StringWriter
StringWriter writer = new StringWriter();
System.out.println(context.toString());
// 从src目录下加载hello.vm模板
// 假若在com.velocity.test包下有一个hello.vm文件,那么加载路径为com/velocity/test/hello.vm
velocityEngine.mergeTemplate("vm/hello.vm", "gbk", context, writer);
// velocityEngine.mergeTemplate("hello.vm", "gbk", context, writer);
System.out.println(writer.toString());
}
}
第二种方式:用class的方式加载 (这里需要的hello.vm文件需要放置src目录下的vm文件夹中)
package velocity;
import java.io.StringWriter;
import java.util.Properties;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
import pojo.User;
public class TestVelocity01 {
public static void main(String[] args) {
Properties properties=new Properties();
//设置velocity资源加载方式为class
properties.setProperty("resource.loader", "class");
//设置velocity资源加载方式为file时的处理类
properties.setProperty("class.resource.loader.class",
"org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
//实例化一个VelocityEngine对象
VelocityEngine velocityEngine = new VelocityEngine(properties);
// 实例化一个VelocityContext
VelocityContext context = new VelocityContext();
// 向VelocityContext中放入键值
context.put("username", "张三");
context.put("password", "123456789");
User u = new User();
u.setAge(18);
u.setUser("yanbinfeng");
context.put("user", u);
// 实例化一个StringWriter
StringWriter writer = new StringWriter();
System.out.println(context.toString());
// 从src目录下加载hello.vm模板
// 假若在com.velocity.test包下有一个hello.vm文件,那么加载路径为com/velocity/test/hello.vm
velocityEngine.mergeTemplate("vm/hello.vm", "gbk", context, writer);
// velocityEngine.mergeTemplate("hello.vm", "gbk", context, writer);
System.out.println(writer.toString());
}
}
hello.vm中的内容如下:
<?xml version="1.0" enconding="utf-8" ?>
<name>$!username<name>
<age>$!user.age</age>
打印出来的结果如下:
org.apache.velocity.VelocityContext@1b277f0
<?xml version="1.0" enconding="utf-8" ?>
<name>张三<name>
<age>18</age>