-- 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模型进行开发。
package com.velocity.demo;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.exception.ParseErrorException;
import org.apache.velocity.exception.ResourceNotFoundException;
public class PromotedVelocityDemo
{
public static void main(String[] args) throws Exception, ParseErrorException, Exception
{
VelocityEngine ve = getVelocityEngine();
VelocityContext context = getVelocityContext();
Template template = ve.getTemplate("com/velocity/demo/promotedTemple");
if(template != null){
StringWriter getWriter = new StringWriter();
template.merge(context, getWriter);
System.out.println(getWriter);
}
}
public static ArrayList getNames() {
ArrayList list = new ArrayList();
list.add("刘少奇");
list.add("李逵");
list.add("王熙凤");
list.add("李四光");
return list;
}
public static ArrayList getNamesMap() {
ArrayList list = new ArrayList();
Map map = new HashMap();
map.put("name", "书包");
map.put("price", "$100.00");
list.add( map );
map = new HashMap();
map.put("name", "唱片");
map.put("price", "$59.99");
list.add( map );
map = new HashMap();
map.put("name", "小菜");
map.put("price", "$3.99");
list.add( map );
return list;
}
public static Map getUserInfo(){
Map<String,String> para = new HashMap<String,String>();
para.put("name", "dirk.zhang");
para.put("age", "20");
para.put("sex", "male");
return para;
}
public static VelocityContext getVelocityContext(){
VelocityContext context = new VelocityContext();
context.put("list", getNames());
context.put("listMap", getNamesMap());
Map<String,String> para = getUserInfo();
if(para.size() >0)
for(String key : para.keySet())
context.put(key, para.get(key));
return context;
}
public static VelocityEngine getVelocityEngine() throws Exception{
VelocityEngine ve = new VelocityEngine();
Properties properties = new Properties();
String fileDir = Thread.currentThread().getContextClassLoader().getResource("").getPath();
// ve.setProperty(Velocity.RESOURCE_LOADER, "class");
// ve.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
properties.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH,fileDir);
properties.setProperty(Velocity.ENCODING_DEFAULT, "utf-8");
properties.setProperty(Velocity.INPUT_ENCODING, "utf-8");
properties.setProperty(Velocity.OUTPUT_ENCODING, "utf-8");
ve.init(properties);
return ve;
}
}
下面是模板文件:
##声明一个变量:this并且设置值为:Velocity
#set( $this = "咫尺天涯")
##使用设置的变量值
这里是$this的博客!
##for打印集合信息数据
#foreach( $name in $list )
姓名:$name!
#end
##声明一个布尔值
#set( $condition = true)
## if else分支判断
#if ($condition)
The condition is true!
#else
The condition is false!
#end
姓名:$name,年龄:$age,性别:$sex
#foreach( $p in $listMap )
项目:$p.name,价格:$p.price;
#end