快速了解Velocity模板引擎

Mon May 25 00:24:02 CST 2015 1369 Java

文章摘要模板引擎技术应用广泛。在Java领域中,Apache有一个叫Velocity的项目。Velocity是一个基于Java的模板引擎,在Java开发领域有着广泛的应用,有不少大型网站均采用了Velocity技术。

这是一段来自互联网对于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模型进行开发。


使用了模板语言定义的模板文件

<user>
    <user-name>$user.name</user-name>
    <user-age>$user.age</user-age>
    <user-gender>$user.gender</user-gender>
<user>

可以输出显示为

<user>
    <user-name>chenzuhuang</user-name>
    <user-age>21</user-age>
    <user-gender>male</user-gender>
<user>

或者

<user>
    <user-name>tankui</user-name>
    <user-age>22</user-age>
    <user-gender>male</user-gender>
<user>

这都取决于你java代码传入的对象user里存放的信息。


甚至你还可以使用判断循环语句

<userList>
    #foreach $!{user} in $!{userList}
    <user>
    <user-name>$user.name</user-name>
    <user-age>$user.age</user-age>
    <user-gender>$user.gender</user-gender>
    <user>
    #end
</userList>


简而言之,模板语言的使用需要事先写一份模板,在模板中的可变值处使用变量,当需要将模板文件用作显示或者作为字符串输出的时候,会把java bean中信息填充到模板文件中使用变量之处。


下面来看一个Velocity的使用例子,来了解下Velocity的工作原理以及应用。


一、下载Velocity的jar包

http://download.csdn.net/detail/yatyou/8731659



二、创建Eclipse Java Project

buildpath导入这两个jar包:

velocity-1.7.jar

Velocity-1.7-dep.jar



三、定义模板

在项目根目录下创建文件夹vm,并在其中创建一个文件index.vm

<!DOCTYPE>
<html>
    <head>
        <title>用户信息</title>
    </head>
    <body>
        <table>
            <tr><th>用户名</th><td>$user.username</td></tr>
            <tr><th>年龄</th><td>$user.age</td></tr>
        </table>
    </body>
</html>


四、定义java bean,用来传递数据

package com.chenzuhuang.blog.bean;

public class User {
	private String username;
	private int age;
	
	public User(String username, int age){
		this.username = username;
		this.age = age;
	}
	
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}


五、测试

package com.chenzuhuang.blog.core;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.Reader;
import java.io.StringWriter;

import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;

import com.chenzuhuang.blog.bean.User;

public class VelocityTest {

	public static void main(String[] args) throws FileNotFoundException {
		//创建bean对象
		User user = new User("chenzuhuang", 21);
		
		//初始化Velocity引擎,Velocity引擎是单例模式且线程安全。
		Velocity.init();
		
		//创建VelocityContext上下文环境,并将user对象存放到VelocityContext中
		VelocityContext context = new VelocityContext();
		context.put("user", user);
		
		//通过FileReader来读取模板文件
		Reader reader = new FileReader("vm/index.vm");
		
		//创建字符串输出流,Velocity会将填充值后的模板字符串放在StringWriter里
		StringWriter vmWriter = new StringWriter(); 
		
		//根据指定的VelocityContext上下文对模板进行填值。
		//第一个参数为指定上下文,第二个参数为字符串输出流,第三个参数为日志Tag,第四个为模板输文件输入流
		Velocity.evaluate(context, vmWriter, "UserMessage", reader);
		
		//将经过替换模板输出
		System.out.println(vmWriter.toString());
		
	}

}


六、运行

输出结果为

<!DOCTYPE>
<html>
	<head>
		<title>用户信息</title>
	</head>
	<body>
		<table>
			<tr><th>用户名</th><td>chenzuhuang</td></tr>
			<tr><th>年龄</th><td>21</td></tr>
		</table>
	</body>
</html>







打赏
打赏

分享到: