这个模板工具确实挺好,写一个入门例子,供想学velocity的同行们参考,有问题的话给我留言:-)
(1)首先是模板(本质就是一个html)
hello.vm
<html>
<body >
#foreach($business in $list)
$business
#end
</body>
</html>
(2)web.xml里面的velocity配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>TestServlet</servlet-name>
<servlet-class>com.urz.test.TestServlet</servlet-class>
<!--属性文件的路径-->
<init-param>
<param-name>org.apache.velocity.properties</param-name>
<param-value>/WEB-INF/velocity.properties</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>/TestServlet</url-pattern>
</servlet-mapping>
<servlet>
<!-这里是log4j的配置->
<servlet-name>InitLog4j</servlet-name>
<servlet-class>com.urz.test.InitLog4j</servlet-class>
<init-param>
<param-name>log4j</param-name>
<param-value>WEB-INF/log4j.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>InitLog4j</servlet-name>
<url-pattern>/InitLog4j</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>hello.vm</welcome-file>
</welcome-file-list>
</web-app>
(3)velocity.properties
#模板的根目录
file.resource.loader.path = template
# 日志文件路径
runtime.log = log/velocity.log
(4)最主要的来了TestServlet.java
package com.urz.test;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import javax.servlet.ServletConfig;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.apache.velocity.Template;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.context.Context;
import org.apache.velocity.exception.ParseErrorException;
import org.apache.velocity.exception.ResourceNotFoundException;
import org.apache.velocity.servlet.VelocityServlet;
/**
* 继承类
*
* @author machao
* @version 0.1 Oct 22, 2008 10:17:51 PM
*/
@SuppressWarnings("deprecation")
public class TestServlet extends VelocityServlet
{
//版本
private static final long serialVersionUID = 1L;
//log4j调试
private Logger log=Logger.getLogger(TestServlet.class);
protected Properties loadConfiguration(ServletConfig config) throws IOException, FileNotFoundException
{
//得到属性文件,找到后要加载
String propsFile = config.getInitParameter(INIT_PROPS_KEY);
Properties prop = new Properties();
if (propsFile != null)
{
String realPath = getServletContext().getRealPath(propsFile);
if (realPath != null)
{
propsFile = realPath;
}
prop.load(new FileInputStream(propsFile));
}
//这里是日志的配置
String log = prop.getProperty(Velocity.RUNTIME_LOG);
if (log != null)
{
log = getServletContext().getRealPath(log);
if (log != null)
{
prop.setProperty(Velocity.RUNTIME_LOG, log);
}
}
// 设置模板文件的位置
String path = prop.getProperty(Velocity.FILE_RESOURCE_LOADER_PATH);
if (path != null)
{
path = getServletContext().getRealPath(path);
if (path != null)
{
prop.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, path);
}
}
return prop;
}
/**
* 就像servlet一样,很好理解吧
* 覆盖方法
* @param request
* @param response
* @param ctx
* @return
*/
public Template handleRequest(HttpServletRequest request, HttpServletResponse response, Context ctx)
{
//模板数据,测试使用
String para1="hello";
String para2="machao";
String para3="tianzone software";
List<String> list=new ArrayList<String>();
list.add(para1);
list.add(para2);
list.add(para3);
// 数据 list添加到上下文环境 context 中去,它将在模板页面上显示
//list应和模板上的一样
ctx.put("list",list);
//得到模板对象,注意异常情况
Template template = null;
try
{
//加载模板文件,注意路径喔:-)
template = getTemplate("hello.vm");
}
catch (ParseErrorException e1)
{
log.debug("Error:parse " + e1);
}
catch (ResourceNotFoundException e2)
{
log.debug("the template not found" + e2);
}
catch (Exception e3)
{
log.debug("Error " + e3);
}
return template;
}
}
好了,到此,你是不是感觉到velocity很简单呢:-)
部署好你的项目,开始测试吧,欢迎你进入velocity的大门!
我给一个我写的小例子,下面有项目结构
部署到你的服务器后,访问路径:http://localhost:8080/TestV/TestServlet