`
takkymj
  • 浏览: 130130 次
  • 性别: 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 扩展了更多的功能。
分享到:
评论

相关推荐

    Velocity

    在深入 Velocity 的核心概念之前,我们先了解一下它的基本原理。Velocity 将模板语言(如 `.vm` 文件)与Java代码相融合,通过简单的语法结构,如 `${expression}` 和 `#if`, `#foreach` 等控制结构,让开发者可以在...

    velocity-1.5.jar,velocity-1.6.2-dep.jar,velocity-tools-1.3.jar

    Velocity可以作为视图层的模板引擎,使得开发者可以通过简单的模板语言来生成动态HTML,而无需深入理解复杂的JSP语法。同时,Velocity Tools的附加功能进一步增强了Velocity的实用性。 在实际使用中,开发者需要将...

    Velocity从入门到精通

    通过本书的学习,读者不仅可以掌握Velocity的基本用法,还能深入了解MVC设计模式的精髓,并通过具体的示例应用加深对Velocity模板引擎的理解。无论是对于Web开发者还是Web设计者来说,本书都是一个宝贵的资源,能够...

    eclipse中velocity插件

    首先,让我们深入了解一下Velocity插件在Eclipse中的作用。Velocity插件提供以下功能: 1. **代码提示和自动完成**:在编写Velocity模板时,插件会提供模板指令、变量和方法的自动补全,有助于减少错误并提高开发...

    JAVAEE Velocity例子工程

    这个工程旨在通过实际的代码演示,帮助开发者理解并掌握Velocity的基本用法,无需深入学习复杂的配置文件。 在传统的Java Web开发中,视图层通常与业务逻辑和数据层分离,Velocity就扮演了视图的角色,允许开发者将...

    velocity 电子书

    这本书深入探讨了Velocity的核心概念和技术,旨在帮助读者充分利用Velocity进行模板设计和页面渲染。 1. **Velocity模板语言(VTL)基础** - VTL是Velocity的核心,它是一种简单但功能强大的模板语言,允许开发者...

    velocity的学习资料

    Velocity是Apache软件基金会下的一个开源项目,它是一个Java模板引擎,用于生成动态Web内容。Velocity在Web开发中常被...通过深入学习和实践,可以掌握如何有效地使用Velocity来创建高效、可维护的动态内容生成系统。

    velocity文档(Velocity1.4java开发指南中文版,Velocity1.4模板使用指南中文版中文版)

    通过阅读这两份文档,你可以深入学习如何配置 Velocity,如何编写模板,以及如何在实际项目中应用 Velocity。 **学习路径** 1. 首先,理解 Velocity 的基本概念和工作原理。 2. 掌握 VTL 语法,包括变量引用、条件...

    velocity和freemarker的比较

    标题“velocity和freemarker的比较”涉及到的是两个在Java...提供的文件列表似乎包含了一些日志文件、项目配置文件和源代码库,这可能是项目开发或调试过程中的记录,对于深入理解这两个模板引擎的工作方式有一定帮助。

    velocity中文文档 教程

    要深入学习Velocity,可以参考其官方文档,包括用户指南、API文档以及示例。同时,网上有许多教程和论坛讨论,可以帮助解决实际开发中的问题。 总的来说,Velocity是一个强大且灵活的模板引擎,它简化了Web开发中的...

    velocity中文

    **Velocity中文手册与学习资料详解** Velocity是一款基于Java的模板引擎,它允许开发者将HTML页面设计与业务逻辑相分离,...通过深入学习和实践,我们可以充分利用Velocity的优势,构建出高效、易维护的Java Web应用。

    JAVA的Velocity语法学习

    同时,Apache官网也有详细的Velocity文档和示例,可以帮助深入理解并熟练运用Velocity。 通过以上介绍,我们可以看到Velocity是一个强大且灵活的模板引擎,对于Java开发者来说,掌握Velocity的使用可以提升开发效率...

    Velocity学习Web项目

    通过这个项目,你可以深入理解如何在Struts 1.x环境中集成Velocity,利用Velocity的模板语言来生成动态内容,同时还能掌握Struts MVC架构的基本工作原理。这不仅有助于提高代码的可读性和可维护性,还能提升Web应用...

    velocity document

    这篇文档将帮助你深入理解Velocity模板语言(VTL)的使用和特性。 **一、Velocity模板语言(VTL)基础** 1. **变量引用**:在Velocity模板中,变量通常用`${variable}`表示,如`${name}`。这会引用Java对象的属性...

    velocity例子

    在这个“velocity例子”中,我们将深入探讨Java与Velocity的集成以及如何使用Velocity来创建动态网页。 1. **Velocity的基本概念** - **模板(Template)**:Velocity模板是HTML或XML文件,其中包含Velocity指令和...

    velocity入门使用教程

    深入学习Velocity,你需要理解以下几个关键点: - **模板解析(Template Parsing)**:Velocity会将模板文件解析为内部的抽象语法树(AST),这个过程是模板执行的基础。 - **MVC模式的应用**:Velocity遵循MVC...

    myeclipse的velocity插件

    此外,还支持断点调试,便于深入理解模板执行流程。 3. **模板模板和代码片段**:内置常用的 Velocity 模板结构和代码片段,可以快速插入,提高开发效率。 4. **整合编辑器功能**:与 MyEclipse 的其他编辑器集成...

    maven velocity

    通过分析这些文件,我们可以深入学习如何在实际项目中应用Maven和Velocity的整合。 总之,Maven和Velocity的整合提供了强大的项目管理和模板处理能力,使得Java Web应用的开发变得更加高效和灵活。通过理解和实践,...

Global site tag (gtag.js) - Google Analytics