您的位置:首页 > 其它

Jelly组件的XML脚本处理法

2006-09-15 12:50 232 查看
Jelly组件的XML脚本处理法
作者: BUILDER.COM
2002-11-18 03:27 PM
[被屏蔽广告]

现在我们利用Listing A里的简单例子来开始学习使用Jelly。你可以在这里找到本文里所涉及程序的完整代码。

Jelly库
Jelly内置了相当多的库,这列在了A里。在我们的例子里使用了三个:

核心(Core)

日志(Log)

交互(Interaction)

通过被分派给XML命名空间,库就可以使用了。在XML声明后的第一个标签<j:jelly>里,我们分派三个命名空间:j、l和i。第一个嵌套标签使用了交互标签库。这个库允许你捕捉来自用户的输入。在这里,你请求得到用户名,并提供了一个匿名用户的缺省值。用户输入的结果保存在变量name里。第二个标签使用了日志库。它输出一些文本并在其中用到了name变量。

表A

Jelly库

jelly:core

jelly:xml

jelly:define

jelly:sql

jelly:jsl

jelly:ant

jelly:werkz

jelly:ojb

jelly:jms

jelly:validate

jelly:http

jelly:interaction

jelly:antlr

jelly:util

jelly:html

jelly:junit

jelly:swing

jelly:quartz

jelly:betwixt

jelly:dynabean

jelly:log

jelly:soap

jelly:jetty

jelly:beanshell

jelly:jeez

jelly:email

jelly:bean

全部细节见标签参考

Jelly的可扩展性
Jelly的一个显著特性是可扩展性。任何常规的JavaBean都能够被绑定到一个XML标签上。JavaBean没有必要扩展任何特别的类或者实现任何特别的接口。如果它支持一个可以调用的方法,例如run()、invoke()或者execute(),在所有适当的设置器被调用以后这个方法才会被调用。如果想要调用一个不同的方法,你可以声明它,就像Listing B所示的这样

Listing B里的类能够通过Listing C里的代码使用Jelly来访问。

Jelly和Ant
Jelly允许对所有已经存在的Ant库进行完全访问。这让使用Ant丰富的工具集来开始编写脚本变得简单起来。例如,使用来自Jelly里的交互和ant库,你能够使用可选的备份功能轻易地编写一个目录复制脚本。(见dircopy.jelly。)

这个Jelly脚本会要你指定一个源目录和目标目录,然后会问你是否想要创建一个备份。如果你回答“是”(这是缺省的选择),它会要你指定一个文件名。脚本会把源目录里的所有的文件都复制到目标目录,如果你回答了“是”,它就创建一个指定目录的tar.gz文件。

Jelly和Maven
[被屏蔽广告]

尽管作为一个独立的脚本编写语言,Jelly是很有用的,但是它被用得最广泛的地方还是在Maven内,后者是来自Jakarta的项目管理和构建系统。Maven是建立在插件的概念上的。Maven所有的插件都是用Jelly编写的。例如,在Maven里缺省的目标是java:jar,它会为一个项目编译所有的源文件并创建一个可分配的JAR文件。

戴着帽子工作:Jelly标签
我们深入到Jelly的内部来看看它用什么来创建一个自定义的Jelly标签库。我们的例子将是个简单的标签,能够把我们的主体文本变成小写的或者大写的。Jelly标签被集中分组成我们在表A里看到的标签库。标签库在Jelly里被标记为命名空间。

<j:jelly
xmlns="jelly:core"
xmlns:case="jelly:com.jelly.examples.CaseTagLibrary">

这个例子让核心标签库缺省的命名空间可用,而让我们自定义的库能够在case命名空间里被使用。CaseTagLibrary必须扩展org.apache.commons.jelly.TagLibrary类,也必须为每个可用的标签调用registerTag方法。

registerTag(“case”, CaseTag.class);

我们现在有一个可用的标签了——case。CaseTag必须扩展org.apache.commons.jelly.TagSupport。TagSupport被声明为抽象的,并需要我们实现doTag(XMLOutput output)。在所有的设置器被调用以后,这个方法会被调用。你要为case标签寻找一个属性类型。而为了我们的标签类,你要像下面这样定义一个设置器方法:

public void setType(String type) {
this.type = type;
}

现在让我们来看看CaseTag类的内容——doTag方法。我们要找的第一件事是用户是否提供了所需的属性,就如Listing D里的那样。

如果type被设置成lower或upper,那我们就开始吧。Case标签是设计用来接收标签内容并把文本转换为大写或者小写的。要做到这一点,你要像Listing E里那样访问文本并将其转换过来。

我们的case标签现在已经完成了。完整的源代码请查CaseTag.java(包含在下载的内容里)。你现在就可以像下面这样使用我们的标签了。

<case:case type=”upper”>Hello World!</case:case>

完整的例子见case.jelly(也在下载的内容里)。

Jelly的安装
下载了Jelly以后,你用Maven来构建和安装它。要把它安装到机器里,就要运行maven dist:install。缺省地,它会被放在/usr/local/jelly下。要使用Jelly,就要确信你把环境变量,$JELLY_HOME,指向了Jelly安装的地方。然后,把$JELLY_HOME/bin添加到你的路径里。Jelly使用forehead来处理类的加载。要让我们的CaseTagLibrary能对jelly使用,把一个包含上述类的JAR文件加到$JELLY_HOME/custom下。

最后几步
现在该是看代码生成的时候了。在含有例子代码的目录里,运行jelly case.jelly。你应该会得到“你好世界(Hello World)”的问候!

结语
Jelly从以前许多脚本编写语言借鉴了所有重要的主旨,并把它们揉合到了一体。它具有高度的可扩展性和易用性,并带有丰富的核心组件集。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: