对于b/s架构的项目而言,表示层呈现页面技术大多数选用jsp,但是对于一个并发量很大的网站而言,jsp并不是一个很好的解决方案,懂Java web开发的人都会知道,jsp就是servlet,jsp->servlet->class->html(第一次编译),第一次编译执行以后class->html。
在Java开源框架层出不穷的今天,很多Java牛人都提出了用其他的技术替代jsp,从而提高页面显示速率,之后就有了模板的概念。模板的概念提出了很多年,应用最好的两大模板引擎:Velocity ,FreeMarker。Velocity是Apache的顶级项目,它出现的非常早,而且有很多成功的项目应用的此模板引擎。FreeMarker在当今应用的非常广泛,我的毕业设计就应用了FreeMarker。这两大模板引擎个人比较倾向于FreeMarker,但是没有办法,公司要求用Velocity,所以只能听公司的了。
package com.velocity.test.model;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.app.VelocityEngine;
import org.junit.BeforeClass;
import org.junit.Test;
public class ModelTest {
@Test
public void testModel() {
VelocityEngine ve = new VelocityEngine();
ve.setProperty(Velocity.RESOURCE_LOADER, "class");
ve.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); //设置类路径加载模板
ve.setProperty(Velocity.INPUT_ENCODING, "GBK");//设置输入字符集
ve.setProperty(Velocity.OUTPUT_ENCODING, "GBK");//设置输出字符集
try {
ve.init();//初始化模板引擎
Template t = ve.getTemplate("com/velocity/test/model/model.vm");//加载模板,相对于classpath路径
VelocityContext context = new VelocityContext();
Person person = new Person("小强", 24);
List<String> hobby = new ArrayList<String>();
hobby.add("aaa");
hobby.add("bbb");
person.setHobby(hobby);
context.put("person", person);
StringWriter writer = new StringWriter();
t.merge(context, writer); //转换
System.out.println(writer.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
public class Person {
private String name;
private int age;
private List<String> hobby;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
//getters and setters
}
model.vm
person.toString():$person
person.name:$person.name
person.age:$person.age
person.Name:$person.Name
person.age:$person.Age
=====================================
person.getName():$person.getName()
person.getAge():$person.getAge()
person.setName("zzq"):$person.setName("zzq")
person.setAge(15):$person.setAge(15)
person.getName():$person.getName()
person.getAge():$person.getAge()
=====================================
java.util.List<String>:
#foreach($s in $person.hobby)
$velocityCount/$person.hobby.size() |$s
#end
person.setHobby(["篮球", "唱歌" , "游泳"]):$person.setHobby(["篮球", "唱歌" , "游泳"])
#foreach($s in $person.hobby)
$s#if($velocityCount != $person.hobby.size()),#end
#end
输出:
person.toString():com.velocity.test.model.Person@1729854
person.name:小强
person.age:24
person.Name:小强
person.age:24
=====================================
person.getName():小强
person.getAge():24
person.setName("zzq"):
person.setAge(15):
person.getName():zzq
person.getAge():15
=====================================
java.util.List<String>:
1/2 |aaa
2/2 |bbb
person.setHobby(["篮球", "唱歌" , "游泳"]):
篮球, 唱歌, 游泳