回到顶部
您的当前位置: 专题> Apache Velocity系列教程
Apache Velocity(十)整合Servlet
2014-06-06 01:25:49
标签: 网络整理 Velocity 整合 Servlet

注:本站所有项目均使用maven构建!

创建maven项目,目录结构

pom.xml引用jar包
<!-- velocity -->
<dependency>
    <groupId>com.e-rimming.third</groupId>
    <artifactId>velocity</artifactId>
</dependency>
<dependency>
    <groupId>com.e-rimming.third</groupId>
    <artifactId>velocity-tools</artifactId>
</dependency>
<!-- apache -->
<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
</dependency>
<dependency>
    <groupId>commons-collections</groupId>
    <artifactId>commons-collections</artifactId>
</dependency>
<dependency>
    <groupId>commons-lang</groupId>
    <artifactId>commons-lang</artifactId>
</dependency>
<dependency>
    <groupId>commons-digester</groupId>
    <artifactId>commons-digester</artifactId>
</dependency>
<!-- servlet -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
</dependency>

注:此处引用的jar包比直接在application使用velocity多引用了servlet和common-digester的依赖!

web.xml增加servlet路径
<servlet>
    <servlet-name>VelocityServlet</servlet-name>
    <servlet-class>cn.ipwin.velocity02.Servlet</servlet-class>
    <!-- 加载自定义的velocity.propeties  -->  
    <init-param>   
        <param-name>org.apache.velocity.properties</param-name>  
        <param-value>/velocity.properties</param-value>  
    </init-param>
</servlet> 

<servlet-mapping>
    <servlet-name>VelocityServlet</servlet-name>
    <url-pattern>/velocity/demo</url-pattern>
</servlet-mapping>

注:默认的velocity配置文件路径为WEB-INF下,若properties路径不在此位置,则需要在加载的时候进行设置,如上xml中init-param内容!

velocity.properties内容
# 加载方式为 webapp 
resource.loader = webapp  
# webapp方式加载处理类 
webapp.resource.loader.class = org.apache.velocity.tools.view.servlet.WebappLoader
# 模板文件目录
webapp.resource.loader.path=/templates/ 
# 输入字符编码
input.encoding=UTF-8
# 输出字符编码
output.encoding=UTF-8
Servlet.java
package cn.ipwin.velocity02;

import java.util.ArrayList;
import java.util.List;

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.tools.view.VelocityViewServlet;

public class Servlet extends VelocityViewServlet {

    /** 序列化版本ID */
    private static final long serialVersionUID = -7175173378476601595L;

    @Override
    protected Template handleRequest(HttpServletRequest request, HttpServletResponse response, Context ctx) {

        // 准备测试数据
        List<String> list = new ArrayList<String>();
        list.add("List element 1");
        list.add("List element 2");
        list.add("List element 3");
        list.add("List element 4");

        ctx.put("list", list);

        return getTemplate("demo.vm");
    }

    @Override
    protected void setContentType(HttpServletRequest request, HttpServletResponse response) {
        response.setContentType("text/html;charset=utf-8");
    }
}
demo.vm
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Velocity DEMO</title>
  </head>
  <body>
    #set( $this = "Velocity")
    $this is so great!<br/>
    #foreach( $name in $list )
        $name<br/>
    #end
  </body>
</html>

运行结果如下:

Velocity is so great!
List element 1
List element 2
List element 3
List element 4