动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息



本月文章推荐
.Java的破解和反破解之道.
.应用Rational工具简化基于J2EE项.
.Java运算符总结.
.JAVA实例 阴阳历算法.
.Hibernate Annotations 实战介绍.
.Java技巧101applet间通信的替代方.
.Java 是传值还是传引用.
.关于 JavaWebFrameWork 的选择.
.Java 编译、反编译、反反编译.
.WSDL 2.0 成为W3C候补.
.Struts开发指南之MVC架构实际应用.
.我来说说Bean的使用方法.
.javascript实现的java里的Map对象.
.ProcessBuilder调用外部命令 并返.
.JCreatorPro3.0与WTK2.0配置心得.
.struts1.1里的页面有效验证.
.Win2000 Server下安装j2ee.
.高手编程之——JTextArea操作.
.Java学习备忘录(二)基础语法和数.
.关于在Java Web中的入侵检测及简.

Java的模板引擎Velocity初体验

发表日期:2008-1-5 |


不少人看过或了解过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一样),内容:

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目录内,运行结构如下:

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,不是很复杂。

接着继续来看看迭代数据吧,把模版hellovelocity.vm中的内容改为:

#foreach( $prodUCt in $list )

  • $product



  • 上一篇:彻底学习Java语言中的覆盖和重载 人气:315
    下一篇:从ifelse到设计模式的转变 人气:321
    浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
      最新网站源码 最新软件下载
    2008-7-5 360安全卫士 V4.2.0.1004
    2008-7-5 PHPDug v2.0 多国语言版
    2008-7-5 乘风电影程序 v3.69 (SQL)
    2008-7-5 乘风电影程序 v3.69
    2008-7-5 wfTextImage文字图像组件 v1.5
    2008-7-5 ZY music! v1.1.0705
    2008-7-5 FavShop网店系统 v1.0
    2008-7-4 天空网络电影系统SKYUC v2.5.1 B
    2008-7-4 Drupal v7.x-dev Build 080704
    2008-7-5 AgileMessenger即时通讯工具 v1.
    2008-7-5 GoodCalculator2.0版固件计算器
    2008-7-5 RepoName源地址搜索工具 v1.21b
    2008-7-5 AgileMessenger即时通讯工具 v1.
    2008-7-5 TouchCopy多媒体管理软件 v3.13完
    2008-7-5 VideosTone视频铃声 v1.1汉化破解
    2008-7-5 TouchPad触摸板 v4.44破解版
    2008-7-5 VideosTone破解补丁 v1.0
    2008-7-5 Feeds GoogleReader客户端 v0.4.3


      发表评论
    姓 名: 验证码:
    内 容:
    [ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
    [ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
    业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
    Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
    ホームページ制作 不動産検索システム 求人情報