Velocity详解及demo

最近遇到了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>


猜你喜欢

转载自blog.csdn.net/y15201653575/article/details/79424559