国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設(shè)計 > 正文

Java的模板引擎Velocity初體驗

2019-11-18 11:15:23
字體:
供稿:網(wǎng)友

不少人看過或了解過Velocity,名稱字面翻譯為:速度、速率、迅速,用在Web開發(fā)里,用過的人可能不多,大都基本知道和在使用Struts,到底Velocity和Struts是如何聯(lián)系,怎么看待Velocity呢?讓我們來嘗試一下,了解Velocity的概念,通過在這里的介紹,強調(diào)在技術(shù)選擇上的問題,讓大家在選擇項目開發(fā)時,可以考慮Velocity,另外也讓大家了解它的思想,究竟它提供了一個很好的思維方式,給大家換換筋骨,換一種思考的方式。

本文基于你對java開發(fā)有一定基礎(chǔ),知道MVC,Struts等開發(fā)模式。

Velocity是一種Java模版引擎技術(shù),該項目由Apache提出,由另外一種引擎技術(shù)Webmacro引深而來。那什么是官方的Velocity定義呢?Apache對它的定義是:一種基于Java的模板引擎,但答應(yīng)任何人使用簡單而強大的模板語言來引用定義在Java代碼中的對象。目前最新的版本是1.4,可以在http://jakarta.apache.org/velocity/index.Html查找更多信息。

其實說白了Velocity也就是MVC架構(gòu)的一種實現(xiàn),但它更多的是關(guān)注在Model和View之間,作為它們的橋梁。對于MVC的最流行架構(gòu)Struts來說,相信大家都不生疏,很多開發(fā)人員已經(jīng)大量在使用Struts架構(gòu),包括IBM的Websphere 5以上的治理平臺版本,Struts技術(shù)很好的實踐了MVC,它有效的減少Java代碼在View(jsp)中的出現(xiàn),但在Model和View之間還是依靠Struts的Taglib技術(shù)來實現(xiàn),試想假如前臺開發(fā)的網(wǎng)頁設(shè)計師對Struts乃至Taglib不熟(相信也挺難熟的,包括后期的維護人員也一樣),將會對網(wǎng)頁設(shè)計師和前臺開發(fā)工程師的相互協(xié)作開發(fā)帶來很大的難度,現(xiàn)實開發(fā)中也還是存在這樣事實,網(wǎng)頁設(shè)計師和前臺開發(fā)之間的工作或多或少還是存在一定的耦合,怎樣最大限度的解決這個難題呢?還是讓我們來看看Velocity或者說這個概念吧。

先做一個最簡單的Velocity開發(fā)例子,讓大家看看Velocity是怎樣工作的:

1、創(chuàng)建1個文件,文件名為:hellovelocity.vm,即velocity模版(其實和html一樣),內(nèi)容:

Welcome $name to Javayou.com!

today is $date.

2、創(chuàng)建1個java文件,HelloVelocity.java,內(nèi)容:

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();

//把數(shù)據(jù)填入上下文

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

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

//為后面的展示,提前輸入List數(shù)值

List temp = new ArrayList();

temp.add("1");

temp.add("2");

context.put("list", temp);

//輸出流

StringWriter writer = new StringWriter();

//轉(zhuǎn)換輸出

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,假設(shè)class編譯到.//bin目錄,而我們所需的類包放到.//lib2目錄內(nèi),運行結(jié)構(gòu)如下:

Welcome Liang to Javayou.com!

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

以上是最簡單的運行結(jié)果,怎么樣,知道個大概吧,模版hellovelocity.vm里的2個定義變量$name和$date分別被context.put("name", "Liang")和context.put("date", (new Date()).toString())所設(shè)的值替代了。

由此看來業(yè)務(wù)流程處理包括業(yè)務(wù)結(jié)果基本在model這層全部解決,而view這一層基本只用使用簡單的VTL(Velocity Template Language)來展示。這樣,Jsp豈不是不用了么?是的,這樣的使用模式有點象早前的CGI方式:)由Velocity自動輸出代碼,并且Velocity在這方面的能力也很強,Turbine里就采用了Velocity來產(chǎn)生很多代碼。

在Velocity中,變量的定義都是使用“$”開頭的,$作為Velocity的標識符。字母、數(shù)字、中劃和下劃線都可以作為Velocity的定義變量。

此外我們還需要注重的是Velocity特色的變量定義,如:$student.No、$student.Address,它有2層含義:第1種是假如student是hashtable,則將從hashtable中提取key為No和Address的值,另外第2種就是它有可能是調(diào)用方法,即上面2個變量將被轉(zhuǎn)換為student.getNo()和student.getAddress()。Velocity對在servlet中的java code返回的值有對象,還可以調(diào)用對象的方法,如$ student.getAddress()等等,在此就不一一舉例和深入了。

上面的例子只是簡單的舉例,現(xiàn)在當然不少人已經(jīng)不滿足這樣的例子了,實際的應(yīng)用中我們還經(jīng)常需要作些選擇性展示和列舉一些迭代數(shù)據(jù),如List列表,當然Velocity(具體來說應(yīng)該是VTL模版語言)也支持這項功能,此外還支持其他一些常用的展示,如模版內(nèi)部的變量(如Jsp內(nèi)的變量),還有強大一些的如創(chuàng)建宏以實現(xiàn)自動化,讓我們繼續(xù)接著往下看吧。

我們還是使用上面的例子,把模版hellovelocity.vm中的內(nèi)容改為:

#set( $iAmVariable = "good!" )

Welcome $name to Javayou.com!

today is $date.

$iAmVariable

重新執(zhí)行上面的運行命令,結(jié)果:

Welcome Liang to Javayou.com!

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

good!

可以看得模版中的變量定義為# set開頭的語句,不是很難理解,執(zhí)行后模版中的變量$iAmVariable都轉(zhuǎn)換成定義的值:good!

再來看看簡單的選擇,把模版hellovelocity.vm中的內(nèi)容改為:

#set ($admin = "admin")

#set ($user = "user")

#if ($admin = = $user)

Welcome admin!

#else

Welcome user!

#end

執(zhí)行運行命令,結(jié)果:

Welcome user!

可以看到判定語句只是簡單的#if ()、#else、#end,不是很復(fù)雜。

接著繼續(xù)來看看迭代數(shù)據(jù)吧,把模版hellovelocity.vm中的內(nèi)容改為:

#foreach( $prodUCt in $list )

  • $product



  • 發(fā)表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發(fā)表
    主站蜘蛛池模板: 鄢陵县| 滨州市| 靖江市| 靖远县| 郴州市| 苏尼特左旗| 封开县| 松溪县| 平遥县| 万盛区| 宜城市| 武乡县| 休宁县| 马尔康县| 上虞市| 蓬莱市| 唐海县| 讷河市| 平乡县| 锦州市| 温州市| 昔阳县| 泾阳县| 长顺县| 宁乡县| 淳安县| 彩票| 年辖:市辖区| 隆林| 郯城县| 共和县| 漳平市| 新兴县| 迁安市| 香河县| 靖江市| 本溪| 鲜城| 九台市| 滁州市| 龙门县|