项目结构如截图所示:
1、首先,导入velocity编程所需的jar包,建好各类文件。所需jar包所下:
2、配置web.xml文件
<!-- 配置velocity的servlet -->
<servlet>
<servlet-name>velocity</servlet-name>
<servlet-class>org.apache.velocity.tools.view.VelocityViewServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>velocity</servlet-name>
<url-pattern>*.vm</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>velocityHandler.HelloHandler</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/index</url-pattern> <!-- 供浏览器访问 -->
</servlet-mapping>
HelloHandler.java具体代码如下:
public class HelloHandler extends VelocityViewServlet{
private static final long serialVersionUID = 1L;
private VelocityEngine velo;
@Override
public void init() throws ServletException{
//velocity引擎对象
velo = new VelocityEngine();
//设置vm模板的装载路径
Properties prop = new Properties();
String path = this.getServletContext().getRealPath("/");
prop.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, path + "templates/");
//设置编码
prop.setProperty(Velocity.ENCODING_DEFAULT, "UTF-8");
prop.setProperty(Velocity.INPUT_ENCODING, "UTF-8");
prop.setProperty(Velocity.OUTPUT_ENCODING, "UTF-8");
try {
//初始化设置,下面用到getTemplate("*.vm")输出时一定要调用velo对象去做,即velo.getTemplate("*.vm")
velo.init(prop);
} catch (Exception e1) {
e1.printStackTrace();
}
}
@SuppressWarnings("unchecked")
@Override
protected Template handleRequest(HttpServletRequest request,
HttpServletResponse response, Context ctx) {
try {
request.setCharacterEncoding("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
response.setCharacterEncoding("UTF-8");
String p1 = "lily";
String p2 = "molly";
String p3 = "张三疯";
@SuppressWarnings("rawtypes")
Vector personList = new Vector();
personList.addElement(p1);
personList.addElement(p2);
personList.addElement(p3);
ctx.put("personList", personList); //将模板数据 list放置到上下文环境context中
Template template = velo.getTemplate("index.vm");
return template;
}
}
index.vm文件
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Sample velocity page</title>
</head>
<body bgcolor="#ffffff">
<center>
<h2>Hello Velocity</h2>
<table width="100" cellpadding="5" cellspacing="1" bordercolor="#333333">
<tr><td bgcolor="#eeeeee" align="center">Names</td></tr>
#foreach ($name in $personList)
<tr><td bgcolor="#6666FF" align="center">$name</td></tr>
#end
</table>
</center>
</body>
</html>
3、在浏览器中输入地址http://localhost/velocity/index,即可看到如下效果
注意:vm文件不可以直接被访问,即在浏览器中直接输入地址http://localhost/velocity/templates/index.vm不会看到效果,vm文件需经过某个机制才能被解析,如struts2,spring等等。