velocity在servlet中的使用

本文将对velocity进行简单的介绍,并展示Velocity在servlet中的基本方式。但是其中有些东西我也不是十分理解,惭愧惭愧。

1.定义

Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的方法。当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。Velocity将java代码从web页面中分离出来,这样为web站点的长期维护提供了便利,同时也为我们在JSP和PHP之外又提供了一种可选的方案。

2.用途

  网页应用(动态网页)

  代码生成(根据模板生成java代码,sql代码或者js代码等)

  自动生成邮件内容(网站注册,密码提示或者自动生成的报告)  

  XML转化

3.velocity的JAR包

  当前稳定版本是1.7.

  两个JAR包,一个是velocity-1.7.zip,这是velocity的主包,包含

    -velocity-<version>.jar  说明:  只包含org.apache.velocity.* packages下特定的代码,不含依赖包,适合嵌入自己的代码或者大型项目

  -velocity-dep-<version>.jar  说明:包含Velocity引擎的所有代码(runtime,anakia, texen and their respective ant tasks)和其他所有的依赖包

  两外一个是:velocity-tools-2.0.gz,这是velocity的工具包,其中包含

  -velocity-tools-<version>.jar   说明:包含三个包中的所有内容

  -velocity-tools-view-<version>.jar  说明:只包含VelocityView和Generic Tools子项目的类,不含Struts相关的内容。

    -velocity-tools-generic-<version>.jar 说明:只含有velocity-tools-generic子项目点的类,不依赖Servlet API 或者 Struts.

 

4.使用Velocity

这里,我只介绍两种使用方式,一种是不使用tools工具包的,一种是使用tools工具包的。而且,都是配合Servlet下的使用。

注意:velocity使用时需要一个配置文件和一个后缀名为vm的模板文件。

不使用tools工具包

1.项目结构

 

2.TestVelocity.java

 1 package com.bjsxt.velocity.action;
 2 
 3 import java.io.BufferedWriter;
 4 import java.io.IOException;
 5 import java.util.ArrayList;
 6 import java.util.Properties;
 7 
 8 import javax.servlet.ServletException;
 9 import javax.servlet.http.HttpServlet;
10 import javax.servlet.http.HttpServletRequest;
11 import javax.servlet.http.HttpServletResponse;
12 
13 import org.apache.velocity.Template;
14 import org.apache.velocity.VelocityContext;
15 import org.apache.velocity.app.Velocity;
16 import org.apache.velocity.exception.ParseErrorException;
17 import org.apache.velocity.exception.ResourceNotFoundException;
18 
19 
20 public class TestVelocity extends HttpServlet {
21     
22     private static final long serialVersionUID = 1L;
23     public void doGet(HttpServletRequest request, HttpServletResponse response)
24             throws ServletException, IOException {
25         doPost(request, response);
26     }
27     
28     public void doPost(HttpServletRequest request, HttpServletResponse response)
29             throws ServletException, IOException {
30         //载入配置文件
31         Properties p=new Properties();
32         p.setProperty("file.resource.loader.class",
33            "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); 
34         Velocity.init(p);
35         
36         //取得VelocityContext作用域
37         VelocityContext context = new VelocityContext();
38         //将list放入context作用域
39         context.put("list", getNames());
40         context.put("uname", "Vic");
41         
42         Template template = null;
43         String templateFile = "example.vm";
44         try {
45             //载入模板文件
46             template = Velocity.getTemplate(templateFile);
47         } catch (ResourceNotFoundException rnfe) {
48             System.out.println("Example : error : cannot find template "+ templateFile);
49         } catch (ParseErrorException pee) {
50             System.out.println("Example : Syntax error in template "+ templateFile + ":" + pee);
51         }
52         BufferedWriter writer = new BufferedWriter(response.getWriter());
53         if (template != null)
54             template.merge(context, writer);
55         writer.flush();
56         writer.close();
57     }
58     private ArrayList getNames() {
59         ArrayList list = new ArrayList();
60         list.add("ArrayList element 1");
61         list.add("ArrayList element 2");
62         list.add("ArrayList element 3");
63         list.add("ArrayList element 4");
64         return list;
65     }
66     public void init() throws ServletException {
67         super.init();
68     }
69 }

2.模板文件

#set( $this = "Velocity")

$this is great!

#foreach( $name in $list )
    $name is great!

#end
My Name Is $uname

3.访问http://localhost:8080/hello_velocity/testVelocity.action即可。

结果:

Velocity is great!

    ArrayList element 1 is great!

    ArrayList element 2 is great!

    ArrayList element 3 is great!

    ArrayList element 4 is great!

  My Name Is Vic

-------------------------------------------------------------------------------

以下内容来自http://www.blogjava.net/sxyx2008/archive/2010/11/11/337819.html

使用tools工具包

项目目录:

 

2.velocity.properties

resource.loader = webapp  
webapp.resource.loader.class = org.apache.velocity.tools.view.servlet.WebappLoader
webapp.resource.loader.path=/WEB-INF/vm/  
input.encoding=gbk
output.encoding=gbk

3.

 1 package com.bjsxt.velocity.action;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 import javax.servlet.http.HttpServletRequest;
 7 import javax.servlet.http.HttpServletResponse;
 8 
 9 import org.apache.velocity.Template;
10 import org.apache.velocity.context.Context;
11 import org.apache.velocity.tools.view.VelocityViewServlet;
12 
13 import com.bjsxt.velocity.bean.Department;
14 import com.bjsxt.velocity.bean.Employee;
15 
16 
17 @SuppressWarnings("serial")
18 public class CustomerVelocityServlet extends VelocityViewServlet{
19 
20     
21     //设置返回视图为text/html编码为gbk
22     @Override
23     protected void setContentType(HttpServletRequest request,
24             HttpServletResponse response) {
25         response.setContentType("text/html;charset=gbk");
26     }
27     
28     //处理请求
29     @Override
30     protected Template handleRequest(HttpServletRequest request,
31             HttpServletResponse response, Context ctx) {
32         ctx.put("username", "张三");
33         ctx.put("password", "123456789");
34         ctx.put("age", "20");
35         ctx.put("address", "陕西西安"); 
36         ctx.put("blog", "http://blogjava.net/sxyx2008");
37         
38         List<Employee> list=new ArrayList<Employee>();
39         list.add(new Employee(1,"张三","陕西西安",18,new Department(1,"软件研发部1")));
40         list.add(new Employee(2,"张三","陕西西安",19,new Department(2,"软件研发部2")));
41         list.add(new Employee(3,"张三","陕西西安",20,new Department(3,"软件研发部3")));
42         list.add(new Employee(4,"张三","陕西西安",21,new Department(4,"软件研发部4")));
43         list.add(new Employee(5,"张三","陕西西安",22,new Department(5,"软件研发部5")));
44         list.add(new Employee(6,"张三","陕西西安",23,new Department(6,"软件研发部6")));
45         list.add(new Employee(7,"张三","陕西西安",24,new Department(7,"软件研发部7")));
46         list.add(new Employee(8,"张三","陕西西安",25,new Department(8,"软件研发部8")));
47         list.add(new Employee(9,"张三","陕西西安",26,new Department(9,"软件研发部9")));
48         list.add(new Employee(10,"张三","陕西西安",27,new Department(10,"软件研发部10")));
49         
50         ctx.put("list", list);
51         //调用父类的方法getTemplate()
52         return getTemplate("demo.vm");
53     }
54 }

4.demo.vm文件

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <TITLE> velocity </TITLE>
 </HEAD>

##嘿嘿,我是velocity中的注释噢
#*
    嘿嘿,我也是velocity中的注释噢
*#

 <BODY>
    <h1>hehe,这是经过由servlet返回的velocity视图</h1>
    hello ${username},这是你的信息
    <ul>
        <li>用户密码为:${password}</li>
        <li>年龄为:${age}</li>
        <li>出生地址为:${address}</li>
        <li>个人主页为:<a href='${blog}'>${blog}</a></li>
    </ul>
    
    <br/>
    
    #foreach($emp in $!{list})
        $!{velocityCount}&nbsp;&nbsp;&nbsp;&nbsp;
        $!{emp.id} &nbsp;&nbsp;&nbsp;&nbsp;
        $!{emp.ename} &nbsp;&nbsp;&nbsp;&nbsp;
        $!{emp.eaddress} &nbsp;&nbsp;&nbsp;&nbsp;
        $!{emp.age} &nbsp;&nbsp;&nbsp;&nbsp;
        $!{emp.department.id} &nbsp;&nbsp;&nbsp;&nbsp;
        $!{emp.department.deptname} <hr/>
    #end
    
 </BODY>
</HTML>

5.访问http://localhost:8080//hello_velocity2/customerVelocityServlet.action

结果:

hehe,这是经过由servlet返回的velocity视图

hello 张三,这是你的信息
用户密码为:123456789
年龄为:20
出生地址为:陕西西安
个人主页为:http://blogjava.net/sxyx2008

1     1      张三      陕西西安      18      1      软件研发部1
2     2      张三      陕西西安      19      2      软件研发部2
3     3      张三      陕西西安      20      3      软件研发部3
4     4      张三      陕西西安      21      4      软件研发部4
5     5      张三      陕西西安      22      5      软件研发部5
6     6      张三      陕西西安      23      6      软件研发部6
7     7      张三      陕西西安      24      7      软件研发部7
8     8      张三      陕西西安      25      8      软件研发部8
9     9      张三      陕西西安      26      9      软件研发部9
10     10      张三      陕西西安      27      10      软件研发部10

 项目文件打包下载:

http://dl.vmall.com/c0mlkunq2s

 

posted @ 2013-04-20 19:54  尼玛范爷  阅读(2542)  评论(0编辑  收藏  举报