您的位置:首页 > 理论基础 > 计算机网络

JudoScript: 让java离你更近一些(转自http://www.sxsoft.com/)

2005-08-05 09:47 441 查看
JudoScript: 让java离你更近一些
  作者:肖菁  来源:Sun技术社区
作者简介
肖菁,软件工程师,IBM developerWorks/Bea dev2dev/sun 技术开发者撰稿人,主要研究J2EE、web services以及他们在websphere、weblogic平台上的实现,拥有IBM的 Developing With Websphere Studio证书。您可以通过guilaida@163.com和作者取得联系,或者查看作者的主页获取更多信息。内容摘要
JudoScript是一种可以对Java和其他对象进行Scripting的工具; JudoScript通常只需要使用更少的代码来完成任务;你还可以使用BSF在java中执行JudoScript代码段,这样,你可以在整体上不放弃Java体系架构,又充分的利用JudoScript的特性更方便的完成具体的工作。什么是Script
相信大家都熟悉一些Script,比如JavaScript、VBScript,当然更熟悉的应该是SQL、Unix shell。很显然,Script就意味着更简单、更快速的达到目标!当然也意味着他们都是面向某一个具体的领域、而不是通用的。比如SQL用于解决数据库的查询问题而Unix shell用于解决服务器的系统管理问题。JudoScript是什么?
JudoScript是一种非常简单易用而又功能强大的Script语言,他基于Java,同时结合多种实现各种功能的开源项目,提供了可针对java对象级、系统级和应用级领域进行Script的能力。为什么需要JudoScript
使用java语言的开发人员通常认为java已经足够好,然而面对具体的应用领域,java仍然不能让人足够满意,比如说将一些目录和文件打包成ZIP文件,又比如说我们基于SAX访问XML文档,这些时候需要的代码量通常是比较大的,而且这些问题在java的对象世界中很难再简化(如果要简化,通常不能很好的遵守面向对象的基本原则),这时候JudoScript派上了用场。JudoScript让我们心动的特性主要体现在以下几点:JudoScript基于java,所以他继承了java的一切优点如可扩充、更灵活等,同时他可以直接对Java对象进行有限的Script。
除了通过Java覆盖个人计算、企业级计算、网络计算等领域外,JudoScript通过整合开源项目,将java的适用领域轻松的扩充到了系统级和应用级。比如通过对Jcom项目的整合,JudoScript可以轻松实现对Com组件的操作(虽然java 的Fans都不太喜欢Com,但是不能否认他在某些范围内仍然有很大的影响力)。
JudoScript定位于Script而不是面向对象的编程语言,所以可以不用考虑面向对象的束缚,更多的从实现具体工作目标出发,因此JudoScript可以对java做封装,这意味着我们可以通过更少的代码来实现更复杂的目标,让我们的编程工作更加简单、迅速。
JudoScript中的HelloWorld
1、环境配置到http://www.judoscript.com下载JudoScript的最新版本。
将judo.jar加入到classpath中
2、代码编写JudoScript的语法借鉴了很多的java语法,你要注意的是少写几句代码就行了。
JudoScript的源文件一般以judo作为后缀名,不过这不是强制性规定,你可以使用其他的后缀名如.j、.net等等
下面是显示在控制台显示"HelloWorld!"字符串的代码块:/*
 * //helloworld.judo
 * 第一个JudoScript程序,实现在控制台
 * 打印Hello World!字符串的功能
 */println "Hello World!"; 
大家可以注意到,这里其实只是使用了一句代码而已,和实现同样功能的java代码比较,JudoScript的代码要少很多。3、代码运行 要运行JudoScript程序,只要在命令行输入java judo helloworld.judo就可以了,下面是作者运行该命令后的屏幕截图:

在JudoScript中使用java对象
下面是一个在JudoScript中使用HashMap对象的例子:/*
 * //java.judo
 * 下面的代码显示如何在JudoScript中使用java对象
 */// 实例化一个HashMap对象
map = new java::java.util.HashMap;map.put("a","a");
map.put("b","b");
map.put("c","c");//在控制台打印当前对象的类型
println map.getClass().getName();//遍历该HashMap对象,将所包含对象的值打印在控制台上
for k in map.keySet() {
  println map.get(k);

[注]需要注意的是在JudoScript中,变量类型是动态的,也就是说变量本身是没有类型的(这是Script语言中的常见处理方式,类似的如JavaScript),变量的值是有类型的。访问数据库
在java中访问数据库不是一件轻松的事情,以数据库查询为例,从加载数据库驱动到最后的数据输出,需要实例化的对象就有好几个如Conneciotn、Statement、ResultSet等等,而在JudoScript中,你要编写的代码如下:/*
 * //jdbc.judo
 * 下面的代码显示如何在JudoScript中查询数据库
 */// 连接数据库
connect to 'jdbc:oracle:thin:@dbsvr:1521:dbname', 'user', 'pass';// 执行查询
executeQuery qry:
  SELECT user_id, first_name, last_name, birth_date, salary
  FROM users
;
// 处理查询结果
println 'user_id   First-Name  Last-Name    Salary    Birth-Date', nl
        '---  ----------  -----------  --------  ----------';
while  qry.next() {
  println qry[1].int()   :<5,
          qry.first_name :<12,
          qry.last_name  :<12,
          qry.salary     :*7.1, '  ',
          qry.birth_date.fmtDate('yyyy-MM-dd');
}
// 断开数据库连接
disconnect(); 
[注] 请在执行之前将数据库驱动包加入classpath中。创建zip文件
如果大家用过java来实现zip文件的操作,应该会有深刻体会:嵌套的输入输出流、复杂的文件遍历。然而使用JudoScript后,一切就变得非常简单了。/*
 * //zip.judo
 * 下面的代码显示如何在JudoScript中创建zip文件
 */// 下面的代码将c:/tmp目录下的所有文件名以字母"e"开头
// 的文件加入到html.zip文件中的src目录下// 创建zip文件
zipfile = createZip('html.zip');
// 拷贝文件
copy 'e*' in 'c://tmp '
  recursive noHidden echo
  into zipfile under 'src/';
// 关闭zip文件
// [注] 一定要调用这个方法,否则文件创建不成功
zipfile.close(); 
JudoScript关注的其他领域
JudoScript关注的领域远不止这些,在Web应用、EJB调用、XML/WSDL/SGML处理、SOAP调用、io操作、COM组件调用、系统环境变量配置、SCP/SSH/CVS等领域,你都可以通过JudoScript使用很少的代码实现非常强大的功能。在Java代码中执行JudoScript代码段
JudoScript是如此的好,然而在java fans的心目中,java仍然是他们的最爱,幸运的是,我们可以将JudoScript代码集成到java中(通过Bean Scripting Framework),这样,我们就可以在java体系架构下面使用强大的JudoScript特性了。你甚至可以在java代码和JudoScript代码之间传递对象实现互操作。/*
 * //java.judo 下面的代码演示如何在java中调用JudoScript代码
 * 下面的例子中将实例化一个HashMap对象,然后将他传递给JudoScript代码,
 * 在JudoScript代码中给HashMap增加内容,随后遍历该HashMap对象,将他 容纳对象的值打印在控制台上
 */
package org.vivianj;import java.util.HashMap;import org.apache.bsf.BSFEngine;
import org.apache.bsf.BSFManager;public class JavaWithJudoScript {  public void invokeJudoScript() {
    try {
      //向BSFManager注册JudoScript的解析类
      BSFManager.registerScriptingEngine("JudoScript",
        "com.JudoScript.BSFJudoEngine", new String[] { "judo", "jud" });
      //在java代码中实例化HashMap对象
      HashMap map = new HashMap();
      //给HashMap增加内容
      map.put("a", "a");
      //构造JudoScript的BSFManager
      BSFManager manager = new BSFManager();
      //将HashMap对象传入BSFManager中
      manager.declareBean("map", map, HashMap.class);
      //创建JudoScript的解析引擎
      BSFEngine engine = manager.loadScriptingEngine("JudoScript");
      //将可执行的JudoScript代码加入到BSFManager中
      String source = "//操作java代码中传入的HashMap对象/r/n"
        + "map.put('b','b'); "
        + "//这个函数遍历HashMap对象,将该对象所包含的内容输出到控制台上/r/n"
        + "function out(){" + "for k in map.keySet() {"
        + "println map.get(k);}" + ";}";
      manager.exec("JudoScript", "", 0, 0, source);
      engine.call(null, "out", null);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }  public static void main(String[] args) {
    new JavaWithJudoScript().invokeJudoScript();
  }

总结
通过上面的一些简单的例子,相信大家对JudoScript的易用性和适用领域有了很好的认识,你可以不用放弃java体系结构(这是java fans 的骄傲),又可以充分利用JudoScrpt来完成一些使用java比较难完成的任务如操作数据库、xml、zip文件等。当然你也可以在JudoScript之上进行扩展,比如利用JudoScript建立一个全新的测试框架(作者目前正在进行这方面的研究)。当然,JudoScript也有缺点,比如他基于文本所以无法通过工具保证代码的正确性,需要编程人员自己保证;又比如他集成了太多的开源项目而且和具体的版本有关系,所以想自己编译JudoScript的源代码不是一件容易的事情,作者花了整整一天的时间去寻找这些需要用到的支持包(其中支持SCP等功能的包的提供者已经不在提供包下载了,作者是在另外一个CVS上下载了源代码编译的,如果大家需要自己编译JudoScript的源代码,可以和作者联系)。参考资源
JudoScript文档和FAQ  http://www.judoscript.com文中出现的源代码 judo_examples.zip
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐