捣鼓了好半天 终于摸着了点门路了. 把demo贴出来给大家一个参考. 欢迎拍转.
1 下载velocity-1.5 ,到Apache网站下载.
2 导入到lib文件夹下,我用得是eclipse 3.2. 文件目录截图如下
3 我是以servlet形式来进行运行得,所以先配置web.xml文件: 即添加一个servlet
<
servlet
>
< servlet-name > vilocityServlet </ servlet-name >
< servlet-class > com.test.servlet.VelocityServletTest </ servlet-class >
< init-param >
< param-name > org.apache.velocity.properties </ param-name >
< param-value > /WEB-INF/classes/velocity.properties </ param-value >
</ init-param >
</ servlet >
< servlet-mapping >
< servlet-name > vilocityServlet </ servlet-name >
< url-pattern > /velocity/* </ url-pattern >
</ servlet-mapping >
< servlet-name > vilocityServlet </ servlet-name >
< servlet-class > com.test.servlet.VelocityServletTest </ servlet-class >
< init-param >
< param-name > org.apache.velocity.properties </ param-name >
< param-value > /WEB-INF/classes/velocity.properties </ param-value >
</ init-param >
</ servlet >
< servlet-mapping >
< servlet-name > vilocityServlet </ servlet-name >
< url-pattern > /velocity/* </ url-pattern >
</ servlet-mapping >
4 写模板:htllo.vm, 其实后缀为html也行得. 其中的标签请自己看velocity手册.
<
html
>
< body >
#set($name="shawn")
Hello, $name < br >
Hello, $name2
< hr >
#foreach ($iii in $theList)
< tr >
< td bgcolor ="#eeeeee" > $iii </ td >
</ tr >
#end
</ body >
</ html >
< body >
#set($name="shawn")
Hello, $name < br >
Hello, $name2
< hr >
#foreach ($iii in $theList)
< tr >
< td bgcolor ="#eeeeee" > $iii </ td >
</ tr >
#end
</ body >
</ html >
5 关键是serlvet 了 代码如下:
( 这里我的代码中,说 VelocityServlet 这个类不赞成使用,因为在文字中间面有黑线划过,不知道是什么原因,知道得朋友请告知一下)
要提及的是载入模板的路径path ,我用的是上下文路径, 当然绝对路径也是可行的.
package
com.test.servlet;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.io.StringWriter;
import java.util.Properties;
import java.util.Vector;
import javax.servlet.ServletConfig;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.velocity.Template;
import org.apache.velocity.context.Context;
import org.apache.velocity.servlet.VelocityServlet;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.VelocityContext;
public class VelocityServletTest extends VelocityServlet ... {
protected Properties loadConfiguration(ServletConfig config)
throws IOException, FileNotFoundException ...{
VelocityEngine engine = new VelocityEngine();
Properties p = new Properties();
String path = config.getServletContext().getRealPath("/");
if (path == null) ...{
path = "/";
}
p.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, path);
p.setProperty("runtime.log", path + "velocity.log");
try ...{
engine.init(p); // 载入模板的路径path ,即上下文路径
} catch (Exception e) ...{
// TODO Auto-generated catch block
e.printStackTrace();
}
return p;
}
public Template handleRequest(HttpServletRequest request,
HttpServletResponse response, Context ctx) ...{
Template template = null;
Template template2 = null;
try ...{
/** *//**
* 主要代码
*/
Velocity.init();
VelocityContext context = new VelocityContext();
String p1 = "JAVA";
String p2 = "C++";
Vector personList = new Vector();
personList.addElement(p1);
personList.addElement(p2);
/**//*
* 将模板数据name, list 放置到上下文环境 context 中去
*/
ctx.put("name2", "go go, Suceess!");
ctx.put("theList", personList);
template = Velocity.getTemplate("/velocity/hello.vm");
} catch (Exception e) ...{
e.printStackTrace();
}
// 以下一段代码主要是获得模板的HTML内容
try ...{
template2 = Velocity.getTemplate("/velocity/hello.vm");
VelocityContext context = new VelocityContext();
context.put("name2", "Eiffel Qiu");
StringWriter writer = new StringWriter();
template2.merge(context, writer);
System.out.println(writer.toString());
} catch (Exception e) ...{
e.printStackTrace();
}
return template;
}
}
import java.io.IOException;
import java.io.FileNotFoundException;
import java.io.StringWriter;
import java.util.Properties;
import java.util.Vector;
import javax.servlet.ServletConfig;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.velocity.Template;
import org.apache.velocity.context.Context;
import org.apache.velocity.servlet.VelocityServlet;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.VelocityContext;
public class VelocityServletTest extends VelocityServlet ... {
protected Properties loadConfiguration(ServletConfig config)
throws IOException, FileNotFoundException ...{
VelocityEngine engine = new VelocityEngine();
Properties p = new Properties();
String path = config.getServletContext().getRealPath("/");
if (path == null) ...{
path = "/";
}
p.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, path);
p.setProperty("runtime.log", path + "velocity.log");
try ...{
engine.init(p); // 载入模板的路径path ,即上下文路径
} catch (Exception e) ...{
// TODO Auto-generated catch block
e.printStackTrace();
}
return p;
}
public Template handleRequest(HttpServletRequest request,
HttpServletResponse response, Context ctx) ...{
Template template = null;
Template template2 = null;
try ...{
/** *//**
* 主要代码
*/
Velocity.init();
VelocityContext context = new VelocityContext();
String p1 = "JAVA";
String p2 = "C++";
Vector personList = new Vector();
personList.addElement(p1);
personList.addElement(p2);
/**//*
* 将模板数据name, list 放置到上下文环境 context 中去
*/
ctx.put("name2", "go go, Suceess!");
ctx.put("theList", personList);
template = Velocity.getTemplate("/velocity/hello.vm");
} catch (Exception e) ...{
e.printStackTrace();
}
// 以下一段代码主要是获得模板的HTML内容
try ...{
template2 = Velocity.getTemplate("/velocity/hello.vm");
VelocityContext context = new VelocityContext();
context.put("name2", "Eiffel Qiu");
StringWriter writer = new StringWriter();
template2.merge(context, writer);
System.out.println(writer.toString());
} catch (Exception e) ...{
e.printStackTrace();
}
return template;
}
}
6 准备就绪 那就运行吧. http://localhost:8080/ZTest/velocity/hello.vm
效果图为:
至此, 结束 .应该只是一个Hello Word级别的入门,希望跟大家一起进步,一起探讨.