Velocity入门

yixiaoqi00 2009-12-29

使用Velocity 模板引擎开发网站

Velocity是如何工作的呢?虽然大多Velocity的应用都是基于Servlet的网页制作。但是为了说明Velocity的使用,我决定采用更通用的Javaapplication来说明它的工作原理。

似乎所有语言教学的开头都是采用HelloWorld来作为第一个程序的示例。这里也不例外。

任何Velocity的应用都包括两个方面:

第一是:模板制作,在我们这个例子中就是hellosite.vm:

它的内容如下(虽然不是以HTML为主,但是这很容易改成一个html的页面)

Hello$name!Welcometo$siteworld!

第二是Java程序部分:

下面是Java代码

Velocity入门 程序代码
import java.io.StringWriter;

importorg.apache.velocity.app.VelocityEngine;

importorg.apache.velocity.Template;

importorg.apache.velocity.VelocityContext;

publicclassHelloWorld{

publicstaticvoidmain(String[]args)throwsException{

/*first,getandinitializeanengine*/

VelocityEngineve=newVelocityEngine();

ve.init();

/*next,gettheTemplate*/

Templatet=ve.getTemplate("hellosite.vm");

/*createacontextand adddata*/

VelocityContextcontext=newVelocityContext();

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

context.put("site","http://www.eiffelqiu.com");

/*nowrenderthetemplateintoaStringWriter*/

StringWriterwriter=newStringWriter();

t.merge(context,writer);

/*showtheWorld*/

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

}

}

将两个文件放在同一个目录下,编译运行,结果是:

HelloEiffelQiu!Welcometohttp://www.eiffelqiu.comworld

为了保证运行顺利,请从Velocity的网站http://jakarta.apache.org/velocity/上下载Velocity的运行包,将其中的VelocityJar包的路径放在系统的Classpath中,这样就可以编译和运行以上的程序了。

这个程序很简单,但是它能让你清楚的了解Velocity的基本工作原理。程序中其他部分基本上很固定,最主要的部分在以下代码

这里Velocity获取模板文件,得到模板引用

Velocity入门 程序代码
/* next, get the Template */Template t = ve.getTemplate( "hellosite.vm" );

这里,初始化环境,并将数据放入环境

Velocity入门 程序代码
/* create a context and add data */

VelocityContextcontext=newVelocityContext();

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

context.put("site", "http://www.eiffelqiu.com");

其他代码比较固定,但是也非常重要,但是对于每个应用来说写法都很相同:

这是初始化Velocity模板引擎

Velocity入门 程序代码
/* first, get and initialize an engine */

VelocityEngineve=newVelocityEngine();

ve.init();

这是用来将环境变量和输出部分结合。

Velocity入门 程序代码
StringWriter writer = new StringWriter();

t.merge(context,writer);

/*showtheWorld*/

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

记住,这在将来的servlet应用中会有所区别,因为网页输出并不和命令行输出相同,如果用于网页输出,将并不通过System.out输出。这会在以后的教程中给大家解释的。

那让我来总结一下Velocity真正的工作原理:

Velocity解决了如何在Servlet和网页之间传递数据的问题,当然这种传输数据的机制是在MVC模式上进行的,也就是View和Modle,Controller之间相互独立工作,一方的修改不影响其他方变动,他们之间是通过环境变量(Context)来实现的,当然双方网页制作一方和后台程序一方要相互约定好对所传递变量的命名约定,比如上个程序例子中的site,name变量,它们在网页上就是$name,$site。这样只要双方约定好了变量名字?敲此骄涂梢远懒⒐ぷ髁恕?nbsp;无论页面如何变化,只要变量名不变,那么后台程序就无需改动,前台网页也可以任意由网页制作人员修改。这就是Velocity的工作原理。

你会发现简单变量名通常无法满足网页制作显示数据的需要,比如我们经常会循环显示一些数据集,或者是根据一些数据的值来决定如何显示下一步的数据,Velocity同样提供了循环,判断的简单语法以满足网页制作的需要。Velocity提供了一个简单的模板语言以供前端网页制作人员使用,这个模板语言足够简单(大部分懂得javascript的人就可以很快掌握,其实它比javascript要简单的多),当然这种简单是刻意的,因为它不需要它什么都能做,View层其实不应该包含更多的逻辑,Velocity的简单模板语法可以满足你所有对页面显示逻辑的需要,这通常已经足够了,这里不会发生象jsp那样因为一个无限循环语句而毁掉系统的情况,jsp能做很多事情,Sun在制定Jsp1.0标准的时候,没有及时的限定程序员在jsp插入代码逻辑,使得早期的jsp代码更象是php 代码,它虽然强大,但是对显示层逻辑来说,并不必要,而且会使MVC三层的逻辑结构发生混淆。

相关推荐

lionelf / 0评论 2020-07-28