Velocity入门

原创 2007年09月23日 05:15:00
一篇Velocity入门级的文章,虽然很简单,但确实能够说明Velocity的工作原理,值得一读。

使用Velocity 模板引擎开发网站

Velocity 是如何工作的呢? 虽然大多 Velocity 的应用都是基于 Servlet 的网页制作。但是为了说明 Velocity 的使用,我决定采用更通用的 Java application 来说明它的工作原理。 
  似乎所有语言教学的开头都是采用 HelloWorld 来作为第一个程序的示例。这里也不例外。 

  任何 Velocity 的应用都包括两个方面:
  第一是: 模板制作,在我们这个例子中就是 hellosite.vm:
  它的内容如下(虽然不是以 HTML 为主,但是这很容易改成一个 html 的页面)

Hello $name! Welcome to $site world!
  第二是 Java 程序部分:
  下面是 Java 代码
程序代码 程序代码
import java.io.StringWriter;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
public class HelloWorld{
    public static void main( String[] args )throws Exception{
        /* first, get and initialize an engine */
        VelocityEngine ve = new VelocityEngine();
        ve.init();
        /* next, get the Template */
        Template t = ve.getTemplate( "hellosite.vm" );
        /* create a context and& nbsp;add data */
        VelocityContext context = new VelocityContext();
        context.put("name", "Eiffel Qiu");
        context.put("site", "
http://www.eiffelqiu.com");
        /* now render the template into a StringWriter */
        StringWriter writer = new StringWriter();
        t.merge( context, writer );
        /* show the World */
        System.out.println( writer.toString() ); 
    }
}

将两个文件放在同一个目录下,编译运行,结果是: 
Hello Eiffel Qiu! Welcome to 
http://www.eiffelqiu.com world 

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

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

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

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

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

程序代码 程序代码
/* create a context and add data */
VelocityContext context = new VelocityContext();
context.put("name", "Eiffel Qiu");
context.put("site", "
http://www.eiffelqiu.com");

  其他代码比较固定,但是也非常重要,但是对于每个应用来说写法都很相同:
这是初始化 Velocity 模板引擎

程序代码 程序代码
/* first, get and initialize an engine */
VelocityEngine ve = new VelocityEngine();
ve.init();

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

程序代码 程序代码
StringWriter writer = new StringWriter();
t.merge( context, writer );
/* show the World */
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 在制定 Jsp 1.0 标准的时候,没有及时的限定程序员在 jsp 插入代码逻辑,使得早期的jsp 代码更象是 php&nb sp;代码,它虽然强大,但是对显示层逻辑来说,并不必要,而且会使 MVC 三层的逻辑结构发生混淆。 

Velocity最简单基础入门

Velocity最简单基础入门
  • caicongyang
  • caicongyang
  • 2016年04月16日 19:11
  • 458

Velocity入门使用教程

参考:百度文库:http://wenku.baidu.com/link?url=nddg_1OX-vYNVOC9OmkjVa3BrQvd8B29RqtY3En010-wev03ASprxB9APX70...
  • yiyiwudian
  • yiyiwudian
  • 2015年08月17日 09:45
  • 2496

Velocity快速入门教程

变量 (1)变量的定义: #set($name = "hello")      说明:velocity中变量是弱类型的。 当使用#set 指令时,括在双引号中的字面字符串将解析和...
  • u011225629
  • u011225629
  • 2015年07月25日 16:09
  • 1380

Velocity模板引擎入门

Velocity模板引擎入门 博客分类: 模版引擎   类似于PHP中的Smarty,Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅...
  • lang_man_xing
  • lang_man_xing
  • 2014年05月07日 13:00
  • 1601

eclipse开发velocity实例(初学)

开发环境         Eclipse Java EE IDE for Web Developers.(Version: Helios Service Release 1)     ...
  • wangxin1982314
  • wangxin1982314
  • 2016年04月24日 18:00
  • 824

velocity的使用简介

Velocity 是一个基于 Java 的模板引擎,它允许任何人仅仅简单的使用模板语言来引用由 Java 代码定义的对象,从而实现界面和 Java 代码的分离,使得界面设计人员可以和 Java 程...
  • LanSeTianKong12
  • LanSeTianKong12
  • 2016年09月19日 09:28
  • 2049

velocity的一些用法

本文源地址:http://www.cnblogs.com/woshimrf/p/5169388.html velocity模板其实就是java不分语法的翻译,用到的属性还是java的方法,get...
  • m0_37585523
  • m0_37585523
  • 2017年04月17日 20:14
  • 181

velocity模板的基本知识

v
  • lafengwnagzi
  • lafengwnagzi
  • 2016年09月30日 18:07
  • 1031

页面片段缓存----基于velocity

一般,页面上会分为很多部分,而不同的部分更新的频率是不一样的。如果对整个页面采用统一的缓存策略则不太合适, 而且很多系统的页面左上角都有一个该死的“Welcome XXX”。这种特定于用户的...
  • zshake
  • zshake
  • 2016年02月13日 21:35
  • 1210

Velocity语法强化56之强大的宏

#macro 指令让模板设计者可以将些重复、相关的的脚本判断定义为一个功能块.无论在什么情况下. 出于单一意图设计的 Velocimacro都会最大程序的减少模板编写中可以的出错,还是看个例子来理解一...
  • Anders_Zhuo
  • Anders_Zhuo
  • 2013年07月26日 13:24
  • 2870
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Velocity入门
举报原因:
原因补充:

(最多只允许输入30个字)