Jelly是一种来自Jakarta的新脚本处理模型,它允许开发人员使用XML来编写脚本。要留心的是,这不仅仅是XML的另一个用途。Jelly功能强大、灵活、好用——更重要的是,它很容易扩展。
现在我们利用Listing A里的简单例子来开始学习使用Jelly。你可以在这里找到本文里所涉及程序的完整代码。
Jelly内置了相当多的库,这列在了表A里。在我们的例子里使用了三个:
通过被分派给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的一个显著特性是可扩展性。任何常规的JavaBean都能够被绑定到一个XML标签上。JavaBean没有必要扩展任何特别的类或者实现任何特别的接口。如果它支持一个可以调用的方法,例如run()、invoke()或者execute(),在所有适当的设置器被调用以后这个方法才会被调用。如果想要调用一个不同的方法,你可以声明它,就像Listing B所示的这样
Listing B里的类能够通过Listing C里的代码使用Jelly来访问。
Jelly允许对所有已经存在的Ant库进行完全访问。这让使用Ant丰富的工具集来开始编写脚本变得简单起来。例如,使用来自Jelly里的交互和ant库,你能够使用可选的备份功能轻易地编写一个目录复制脚本。(见dircopy.jelly。)
这个Jelly脚本会要你指定一个源目录和目标目录,然后会问你是否想要创建一个备份。如果你回答“是”(这是缺省的选择),它会要你指定一个文件名。脚本会把源目录里的所有的文件都复制到目标目录,如果你回答了“是”,它就创建一个指定目录的tar.gz文件。