简介
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模型进行开发
说明
Velocity 官方主页:http://velocity.apache.org/
最新版本下载地址:http://velocity.apache.org/download.cgi#engine
JAVA引擎模板技术应该算是比较老的技术了,最后更新的版本是1.7 Released,以下实例均使用该最新版本
实例
App
Velocity可以应用在普通java程序中,下面简单介绍其使用
依赖包
需导入以下jar包
commons-beanutils-1.7.0.jar
commons-collections-3.2.jar
commons-digester-1.8.jar
commons-lang-2.2.jar
commons-logging-1.1.jar
velocity-1.7.jar
Demo程序
package com.velocity.demo.app;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.OutputStreamWriter;
import java.util.Properties;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
/**
* Velocity App Demo
*
* @author Yaphis 2014年6月17日 上午9:58:17
*/
public class VelocityAppDemo {
public static void main(String[] args) {
BufferedWriter writer = null;// 输出流
try {
String classPath = VelocityAppDemo.class.getResource("/").getPath();
String velocityProp = classPath + "appVelocity.properties";
Properties prop = new Properties();
prop.load(new FileReader(new File(velocityProp)));
Velocity.init(prop);// 也可以使用其他初始化构造方法
VelocityContext context = new VelocityContext();
String str[] = new String[] { "A1", "A2", "A3" };
context.put("list", str);
Template template = Velocity.getTemplate("hello.vm");// 该文件夹必须在工程根目录下
writer = new BufferedWriter(new OutputStreamWriter(System.out));
if (null != template) {
template.merge(context, writer);
}
writer.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != writer) {
writer.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
Web
Velocity可以应用在Web程序中,下面简单介绍其使用
依赖包
除上面APP程序导入的jar包外,还需导入velocity-tools-view-2.0.jar
Demo程序
只贴出核心代码,完整工程示例见附件VelocityDemo.zip
package com.velocity.demo.web;
import java.util.Properties;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.velocity.Template;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.context.Context;
import org.apache.velocity.tools.view.VelocityViewServlet;
/**
* Velocity Servlet Demo 继承VelocityViewServlet重写handleRequest快速开发 具体实现可以去读源码
*
* @author Yaphis 2014年6月17日 上午10:58:25
*/
public class VelocityServletDemo extends VelocityViewServlet {
private static final long serialVersionUID = 975360877834044842L;
@Override
public void init() throws ServletException {
String webApppath = this.getServletContext().getRealPath("/");
Properties prop = new Properties();
prop.setProperty("file.resource.loader.path", webApppath + "webTemplate");// 设置template文件的目录
Velocity.init(prop);
}
@Override
protected Template handleRequest(HttpServletRequest request, HttpServletResponse response, Context ctx) {
try {
String[] str = new String[] { "T1,T2,T3" };
ctx.put("list", str);
Template template = Velocity.getTemplate("hello.vm");
return template;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}