论坛登陆 用户名:  密 码:
设为首页  加入收藏
08年北京名校秋季招生
名牌院校免试入学宽进严出,突破考分限制,名校与你零距离,以下院校按报名先后顺序录取,24小时网上报名覆盖全国
  您现在的位置: 中国教育招生在线 >> IT >> JAVA认证 >> IT正文
Java的模板引擎Velocity初体验
 作者:佚名     2007-3-14 17:34:24        来源:不详  浏览次数:

 

 

 

 

 

 

 

 

不少人看过或了解过Velocity,名称字面翻译为:速度、速率、迅速,用在Web开发里,用过的人可能不多,大都基本知道和在使用Struts,到底Velocity和Struts是如何联系,怎么看待Velocity呢?让我们来尝试一下,了解Velocity的概念,通过在这里的介绍,强调在技术选择上的问题,让大家在选择项目开发时,可以考虑Velocity,另外也让大家了解它的思想,毕竟它提供了一个很好的思维方式,给大家换换筋骨,换一种思考的方式。

本文基于你对Java开发有一定基础,知道MVC,Struts等开发模式。

Velocity是一种Java模版引擎技术,该项目由Apache提出,由另外一种引擎技术Webmacro引深而来。那什么是官方的Velocity定义呢?Apache对它的定义是:一种基于Java的模板引擎,但允许任何人使用简单而强大的模板语言来引用定义在Java代码中的对象。目前最新的版本是1.4,可以在http://jakarta.apache.org/velocity/index.html查找更多信息。

其实说白了Velocity也就是MVC架构的一种实现,但它更多的是关注在Model和View之间,作为它们的桥梁。对于MVC的最流行架构Struts来说,相信大家都不陌生,很多开发人员已经大量在使用Struts架构,包括IBM的Websphere 5以上的管理平台版本,Struts技术很好的实践了MVC,它有效的减少Java代码在View(Jsp)中的出现,但在Model和View之间还是依靠Struts的Taglib技术来实现,试想如果前台开发的网页设计师对Struts乃至Taglib不熟(相信也挺难熟的,包括后期的维护人员也一样),将会对网页设计师和前台开发工程师的相互协作开发带来很大的难度,现实开发中也还是存在这样事实,网页设计师和前台开发之间的工作或多或少还是存在一定的耦合,怎样最大限度的解决这个难题呢?还是让我们来看看Velocity或者说这个概念吧。

先做一个最简单的Velocity开发例子,让大家看看Velocity是怎样工作的:

1、创建1个文件,文件名为:hellovelocity.vm,即velocity模版(其实和html一样),内容:

Hello Velocity

Welcome $name to Javayou.com!

today is $date.

2、创建1个java文件,HelloVelocity.java,内容:

package com.javayou.velocity;

import java.io.StringWriter;

import java.util.*;

import org.apache.velocity.app.VelocityEngine;

import org.apache.velocity.Template;

import org.apache.velocity.VelocityContext;

/**

* @author Liang.xf 2004-12-14

*/

public class HelloVelocity {

public static void main(String[] args) throws Exception {

//初始化并取得Velocity引擎

VelocityEngine ve = new VelocityEngine();

ve.init();

//取得velocity的模版

Template t = ve.getTemplate("hellovelocity.vm");

//取得velocity的上下文context

VelocityContext context = new VelocityContext();

//把数据填入上下文

context.put("name", "Liang");

context.put("date", (new Date()).toString());

//为后面的展示,提前输入List数值

List temp = new ArrayList();

temp.add("1");

temp.add("2");

context.put("list", temp);

//输出流

StringWriter writer = new StringWriter();

//转换输出

t.merge(context, writer);

System.out.println(writer.toString());

}

}

3、在http://jakarta.apache.org/site/binindex.cgi上下载Velocity 1.4 zip,解压后获取velocity-1.4.jar,用它来编译上面的类HelloVelocity.java。

4、把1上的hellovelocity.vm copy到运行的当前目录下,运行HelloVelocity还需要其他类包,可以从下载后的velocity1.4.zip来,\\velocity-1.4\\build\\lib,把commons-collections.jar、logkit-1.0.1.jar引入后运行java -cp .\\bin; -Djava.ext.dirs=.\\lib2 com.javayou.velocity.HelloVelocity,假设class编译到.\\bin目录,而我们所需的类包放到.\\lib2目录内,运行结构如下:

Hello Velocity

Welcome Liang to Javayou.com!

today is Tue Dec 14 19:26:37 CST 2004.

以上是最简单的运行结果,怎么样,知道个大概吧,模版hellovelocity.vm里的2个定义变量$name和$date分别被context.put("name", "Liang")和context.put("date", (new Date()).toString())所设的值替代了。

由此看来业务流程处理包括业务结果基本在model这层全部解决,而view这一层基本只用使用简单的VTL(Velocity Template Language)来展示。这样,Jsp岂不是不用了么?是的,这样的使用模式有点象早前的CGI方式:)由Velocity自动输出代码,并且Velocity在这方面的能力也很强,Turbine里就采用了Velocity来产生很多代码。

在Velocity中,变量的定义都是使用“$”开头的,$作为Velocity的标识符。字母、数字、中划和下划线都可以作为Velocity的定义变量。

此外我们还需要注意的是Velocity特色的变量定义,如:$student.No、$student.Address,它有2层含义:第1种是如果student是hashtable,则将从hashtable中提取key为No和Address的值,另外第2种就是它有可能是调用方法,即上面2个变量将被转换为student.getNo()和student.getAddress()。Velocity对在servlet中的java code返回的值有对象,还可以调用对象的方法,如$ student.getAddress()等等,在此就不一一举例和深入了。

上面的例子只是简单的举例,现在当然不少人已经不满足这样的例子了,实际的应用中我们还常常需要作些选择性展示和列举一些迭代数据,如List列表,当然Velocity(具体来说应该是VTL模版语言)也支持这项功能,此外还支持其他一些常用的展示,如模版内部的变量(如Jsp内的变量),还有强大一些的如创建宏以实现自动化,让我们继续接着往下看吧。

我们还是使用上面的例子,把模版hellovelocity.vm中的内容改为:

#set( $iAmVariable = "good!" )

Welcome $name to Javayou.com!

today is $date.

$iAmVariable

重新执行上面的运行命令,结果:

Welcome Liang to Javayou.com!

today is Tue Dec 14 22:44:39 CST 2004.

good!

可以看得模版中的变量定义为# set开头的语句,不是很难理解,执行后模版中的变量$iAmVariable都转换成定义的值:good!

再来看看简单的选择,把模版hellovelocity.vm中的内容改为:

#set ($admin = "admin")

#set ($user = "user")

#if ($admin = = $user)

Welcome admin!

#else

Welcome user!

#end

执行运行命令,结果:

Welcome user!

可以看到判断语句只是简单的#if ()、#else、#end,不是很复杂。


1 2 下一页>>

责任编辑:lss
  相关新闻
JSFToolbox--用Dreamweaver开发JSF
Java模板引擎Velocity基本语法
【JAVA基础】JDBC连接DB2数据库详解
为什么要学习Java,成为Java程序员
Java基础-漫谈EJB在Java中的应用
漫谈EJB在Java中的应用(二)
J2EE技术-漫谈EJB在Java中的应用
JAVA测试:使用JMock来实现孤立测试
看看如何在Struts应用中施展AJAX魔法
通过java.net.Socket类抓取网页内容
为什么要学习Java,成为Java程序员
Java基础-漫谈EJB在Java中的应用
漫谈EJB在Java中的应用(二)
运用Jakarta Struts的七大实战心法
通过Java Swing 看透MVC设计模式
开发保留标准浏览器功能的AJAX应用程序
Web框架趣谈之Java Web 框架的甜点
Web2.0时代的核心应用:Ajax简介
精华:AJAX开发简略(第一部分)
Thinking in AJAX(三)——AJAX框架汇总
  评论
现在有100人对本文发表评论
查看所有评论
 
推  荐
 
100本成功必读热销书
热门招生
  北京文理研修学院   前进大学
  北京明园大学   北京建设大学
  北京邮电大学世纪学院   北方工商管理学院
  联想软件定向委培班   香港数码动画学院
  青年企业管理研修学院   北京华夏管理学院
热门培训
网络化办公专家培训认证 电子科技大学软件学院
软件测试工程师培训认证 北大青鸟十大授权培训
IT硬件工程师培训认证班 北京环球雅思荷兰预科
JAVA开发工程师培训 潜能时代IT服务管理培训
网络信息化工程师培训 清华大学继续教育学院
论坛精选
 
有些细节是男人也该注意的风度!最容易读错的字
某强人手机里保存的30条短信 中国十大高薪职业
最感人的十大韩剧经典台词 嫁给工程师的N个理由
爆强!只有一句话的鬼故事 转贴教你如何做妖精
 女人一定要記住的話 女人最好别嫁给最爱的男人
城市联盟
 大连 上海 天津 广州 西安 深圳  天津  青岛  大连  福州  沈阳  青海  连云港  南京  吉林  厦门  威海  辽宁  呼和浩特
Copyright © 2006   www.edu999.com   All rights reserved. 中国教育招生在线  版权所有
北京市通信管理局[2004]字第552号函    京ICP证040442号