`
takkymj
  • 浏览: 124227 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

深入velocity

阅读更多
下面我们通过一个简单的实例来讲解一下velocity的使用过程
Java代码 
1. // 创建引擎  
2.         VelocityEngine ve=new VelocityEngine();  
3.         //设置模板加载路径,这里设置的是class下  
4.         ve.setProperty(Velocity.RESOURCE_LOADER, "class");  
5.         ve.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");  
6.         try {  
7.             //进行初始化操作  
8.             ve.init();  
9.             //加载模板,设定模板编码  
10.             Template t=ve.getTemplate("test/velocity/simple1.vm","gbk");  
11.             //设置初始化数据  
12.             VelocityContext context = new VelocityContext();  
13.             context.put("name", "张三");  
14.             context.put("project", "Jakarta");  
15.             //设置输出  
16.             StringWriter writer = new StringWriter();  
17.             //将环境数据转化输出  
18.             t.merge(context, writer);  
19.             //简化操作  
20.             //ve.mergeTemplate("test/velocity/simple1.vm", "gbk", context, writer );  
21.             System.out.println(writer.toString());  
22.         } catch (Exception e) {  
23.             e.printStackTrace();  
24.         } 


这里需要注意的是Template t=ve.getTemplate("test/velocity/simple1.vm","gbk");
这里的gbk不是必须的,但是我的模板中使用了中文所以要指定编码规则。

其次是
ve.setProperty(Velocity.RESOURCE_LOADER, "class");
ve.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
很多人初次使用velocity的时候总是找不到模板,而改用绝对路径访问模板
就是因为没有设置模板存储的地址

也可以使用Velocity.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, loadpath);
loadpath是路径地址

simple1.vm
Java代码 
1. ## 第一个例子  
2. 你好 $name !  
3. $project project. 


到目前为止一个简单单完整的velocity已经完成。









下面讲利用 Velocity 怎么更好解决目前项目的一个简单问题:系统在进行支付了支付后,自己按设定的信息模板发送一条短信给责任人。信息模板是:
{单据责任人}:您的 {单据号} 号{单据类型}在 {操作日期} 日已支付
原来的处理方式是在程序中拿到上面定义的模板一次又一次的把前面大括中内容(含大括号)replaceAll() 成实际数据。
如果更多的这种信息模板,处理起来就是不断的重复着代码。
下面介绍利用 Velocity 如何简练的处理上面的问题。Velocity 可在 http://velocity.apache.org/ 下载,下得 velocity-1.5.zip (提笔时版本是1.5),其中有 velocity-1.5.jar和其和依赖包(lib目录中),例子中采用从类路径中加载模板,具体步骤如下:
一:定义模板文件 helloVelocity.vm (要放在类路径下)

1.## {单据责任人}:您的 {单据号} 号{单据类型}在 {操作日期} 日已支付
2.${owner}:您的 ${bill} 号${type}在 ${ date } 日已支付

双井号"##"开始是 velocity 模板的注释,与 Velocity.INPUT_ENCODING 对应,要求 helloVelocity.vm 用 GBK 字符集保存,否则出乱码。

二:加载模板,填充值,输出。 HelloVelocity.java 的代码如下
01.package com.unmi.velocity;
02.

03.import java.io.*;
04.import java.text.*;
05.import java.util.*;
06.

07.import org.apache.velocity.*;
08.import org.apache.velocity.app.*;
09.

10.public class HelloVelocity {
11.    public static void main(String[] args) throws Exception {
12.        // 配置初始化参数
13.        Properties props = new Properties();
14.        props.setProperty(Velocity.INPUT_ENCODING, "GBK");
15.        props.setProperty(Velocity.RESOURCE_LOADER, "class");
16.        props.setProperty("class.resource.loader.class",
17.                        "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
18.

19.        // 初始化并取得Velocity引擎
20.        VelocityEngine ve = new VelocityEngine(props);
21.

22.        // 取得velocity的模版
23.        Template template = ve.getTemplate("helloVelocity.vm");
24.

25.        // Template实例的获取方式也可以用下面两行代码
26.        // Velocity.init(props);
27.        // Template template = Velocity.getTemplate("helloVelocity.vm");
28.

29.        // 取得velocity的上下文context
30.        VelocityContext context = new VelocityContext();
31.

32.        // 把数据填入上下文
33.        context.put("owner", "Unmi");
34.        context.put("bill", "1000");
35.        context.put("type", "报销单");
36.        context.put("date", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
37.                .format(new Date()));
38.

39.        // 输出流,你可以自由控制输出到哪,String、File、Socket 等
40.        Writer writer = new PrintWriter(System.out);
41.

42.        // 转换输出
43.        template.merge(context, writer);
44.        writer.flush();
45.    }
46.}

以上代码执行结果是在控制台下输出

Unmi:您的 1000 号报销单在 2007-06-04 21:56:13 日已支付

OK,代码应该可以说是十分清晰明了,加载模板->填充值->合并模板输出内容,这就是模板技术要做的事情。
上面介绍的是用 ClasspathResourceLoader 方式加载模板,Velocity 还提供了其他几种 ResourceLoader: DataSourceResourceLoader, FileResourceLoader, JarResourceLoader, StringResourceLoader, URLResourceLoader。由名称我们就能知道它们是从哪加载模板,可在项目中灵活选用适合自己的 ResourceLoader(通过配置 Velocity 引擎的初始化参数)。
Velocity 的默认配置在 velocity.jar 中的 org/apache/velocity/runtime/defaults/velocity.propertis,你可以修改这个文件以适于你的需求,这样就不需要对 VelocityEngine 配置初始化参数 Properties 了。

当然,上面只是一个非常简单的例子,如果仅能完成如此之功能,肯定是用不广泛。所以 Velocity 还提供定义了一种称之为 VTL(Velocity Template Language) 的东西,支持 #if、#foreach、#set、#include、#parse、#macro 等语法能处理你更复杂的数据8028,详细语法参考 Velocity用户手册。可以定义出你想要的功能更完善的模板。他可以作为一个 view 替代 jsp。当然一家定义的 VTL 着实给学习者增加了不少难度,但当你真正喜欢上了,这些都不成问题。
有一个 Velocity Eclipse 插件,可设置 Updates Site 为 http://propsorter.sourceforge.net/veloeclipse 进行下载或更新,方便在Eclipse 中编辑 vm 文件。
你可以想想 Velocity 能为你轻松解决什么问题,如定义模板自动化生成代码,把我某个 Blog 上的所有日志依据模板生成一个 rss.xml 文件就能导入到别的博客中,与 Spring 结合使用。http://velocity.apache.org/ 上的 anakia/texen/velocity-tools 为 Velocity 扩展了更多的功能。
分享到:
评论

相关推荐

    深入分析Java Web技术内幕高清PDF版.zip

    《深入分析Java Web技术内幕》围绕JavaWeb相关技术从三方面全面深入地进行阐述...最后介绍Java服务端技术,主要包括Servlet、Session与Cookie、Tomcat与Jetty服务器、Spring容器、Ibatis框架和Velocity框架等原理介绍。

    Velocity基本语法介绍

    以下是对Velocity的基本语法进行了深入的介绍。需要的朋友可以过来参考下

    深入分析Java Web技术内幕 修订版

    最后介绍了Java 服务端技术,主要包括Servlet、Session 与Cookie、Tomcat 与Jetty服务器、Spring 容器、iBatis 框架和Velocity 框架等原理介绍,并介绍了服务端的一些优化技术。 《深入分析Java Web技术内幕(修订版...

    深入分析Java Web技术内幕 修订版.pdf

    主要围绕Java Web 相关技术从三方面...最后介绍了Java 服务端技术,主要包括Servlet、Session 与Cookie、Tomcat 与Jetty服务器、Spring 容器、iBatis 框架和Velocity 框架等原理介绍,并介绍了服务端的一些优化技术。

    深入浅出struts2

    │深入浅出STRUTS 2 Struts Ti却发现了二者在技术与开发人员这两个层面上的共同之处,不久之后,两个项目就在WebWork的技术基础上进行了合并2。 当我们说起WebWork的时候,我们实际上说的是两个项目——XWork和...

    深入浅出Struts2(附源码)

    本书是广受赞誉的Struts 2优秀教程,它全面而深入地阐述了Struts 2的各个特性,并指导开发人员如何根据遇到的问题对症下药,选择使用最合适的特性。作者处处从实战出发,在丰富的示例中直观地探讨了许多实用的技术,...

    两轮自平衡小车源代码.zip

    小车两轮平衡车+原理图+教程+详细注释,深入理解pwm控制电机,PID算法等等模块

    Freemark基础入门+深入

    Freemaker是一个强大的模板引擎,相比velocity而言,其强大的过程调用、递归和闭包回调功能让freemaker可以完成几乎所有我们所想的功能。

    深入浅出Struts 2 .pdf(原书扫描版) part 1

    书中介绍了如何利用Struts 2 来解决Web 应用开发中的常见问题,同时还深入浅出地探讨了许多能帮助程序员编写Struts 2 应用程序的技巧,如管理页面导航活动、输入验证、国际化和本地化、对Ajax 的支持,等等。...

    深入探究使JavaScript动画流畅的一些方法

    本文逐一遍览了基于Javascript的DOM动画库,如Velocity.js和GSAP,看其是如何比jQuery和CSS动画效果更具性能的. jQuery 让我们先从基础的开始: JavaScript 和 jQuery 被错误的混为一谈了. JavaScript 动画是很快的. ...

    Java数据库高级编程宝典.part2

    本书从数据库的基础知识、软件开发环境的构建以及JSP,Velocity,OJB,Struts等常用技术的基础知识入手,通过多个完整的实例讲解了使用Java语言进行软件开发的流程和方法。 书中选取的实例,既注重实例的多样性,也...

    Java数据库高级编程宝典.part1

    本书从数据库的基础知识、软件开发环境的构建以及JSP,Velocity,OJB,Struts等常用技术的基础知识入手,通过多个完整的实例讲解了使用Java语言进行软件开发的流程和方法。 书中选取的实例,既注重实例的多样性,也...

    Tomcat与JavaWeb开发技术详解(第二版) 孙卫琴

    主要内容包括:Tomcat和Java Web开发的基础知识、Java Web开发的高级技术、在Java Web应用中运用第三方提供的实用软件(如Struts、Velocity和Log4J)的方法,以及Tomcat的各种高级功能。 书中内容注重理论与实践相...

    Tomcat与Java Web开发技术详解(第2版).part1.rar

    主要内容包括:tomcat和java web开发的基础知识、java web开发的高级技术、在java web应用中运用第三方提供的实用软件(如struts、velocity和log4j)的方法,以及tomcat的各种高级功能。  书中内容注重理论与实践相...

    Tomcat与Java Web开发技术详解(第2版).part5.rar

    主要内容包括:tomcat和java web开发的基础知识、java web开发的高级技术、在java web应用中运用第三方提供的实用软件(如struts、velocity和log4j)的方法,以及tomcat的各种高级功能。  书中内容注重理论与实践相...

    Tomcat与Java Web开发技术详解(第2版).part3.rar

    主要内容包括:tomcat和java web开发的基础知识、java web开发的高级技术、在java web应用中运用第三方提供的实用软件(如struts、velocity和log4j)的方法,以及tomcat的各种高级功能。  书中内容注重理论与实践相...

    Tomcat与Java Web开发技术详解(第2版).part4.rar

    主要内容包括:tomcat和java web开发的基础知识、java web开发的高级技术、在java web应用中运用第三方提供的实用软件(如struts、velocity和log4j)的方法,以及tomcat的各种高级功能。  书中内容注重理论与实践相...

    Tomcat 与Java web开发技术详解(孙卫琴)

    主要内容包括:Tomcat和Java Web开发的基础知识、Java Web开发的高级技术、在Java Web应用中运用第三方提供的实用软件(如Struts、Velocity和Log4J)的方法,以及Tomcat的各种高级功能。 书中内容注重理论与实践相...

Global site tag (gtag.js) - Google Analytics