网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  jsr-223(scripting for the java platform) 实现     
  文章作者:未知  文章来源:水木森林  
  查看:82次  录入:管理员--2007-11-17  
 
  最新的java主版本(java se 6,又称mustang)现在正处于beta版本阶段。虽然该版本并不像java 5的更新那么多,但是它确实有一些有趣的新特性。毋庸置疑,其中的一个就是对脚本编写语言的支持。
 
  诸如php、ruby、javascript、python(或jython)之类的脚本编写语言被广泛应用于许多领域,并由于其灵活性和简单性而大受欢迎。由于脚本是被解释而不是被编译的,所以可以轻松地从命令行运行和测试它们。这就压缩了编码/测试周期,并提高了开发人员的生产率。脚本通常是动态键入的,其语法极富表现力,所编写出的算法要比java中的等效算法简明得多。使用起来通常也很有趣。
 
  在很多情况下,从java使用脚本编写语言会很有用,比如为java应用程序提供扩展,以便用户可以编写自己的脚本进行扩展或定制化核心功能。脚本编写语言可读性更强,也更容易编写,所以(从技术上来说)它们是用于为终端用户提供根据需求定制化产品的可能性的理想语言。
 
  早已经有许多java可用的独立脚本编写包了,包括rhino、jacl、jython、beanshell、jruby等。新消息是java 6通过一个标准接口为脚本编写语言提供了内置支持。
 
  java 6提供对jsr-223规范的全面支持。该规范提供了一种从java内部执行脚本编写语言的方便、标准的方式,并提供从脚本内部访问java资源和类的功能。java 6附带了与mozilla rhino的javascript 实现的内置集成。基于该规范,对诸如php、groovy和beanshell之类的其它脚本编写语言的支持也正在进行中。本文关注的是rhino实现,但是其它语言应该是基本相同的。
 
  那么如何在java 5中使用jsr-223的实现呢? 偶经过仔细地研究, 终于找到了解决方法.... 
 
     1. 干活要从理论开始....
 
     根据javadoc的说法, javax.script.scriptenginemanager 是通过jar规范中所谓的服务提供商(service provider)方法来在库中检索 javax.script.scriptenginefactory 实现类并自动注册的. ok, 了解了这个就好办了, 准备开始干活哈....
 
     2. 开始动手干活了.... :)
 
     首先制作jsr-223规范实现的包(包括sun的javascript默认实现):
     使用winrar等压缩工具打开jre6中rt.jar文件(注意要提前备份!我的就是备份为jsr-233.jar), 如图1所示:
jsr-223(scripting for the java platform) 实现(图一)
图1 rt.jar的目录结构

     ok,下面开始删除文件.... 除了com.sun.script、sun.org、javax.script、meta-inf目录之外,其余的目录全都删除。删除后如下图所示:
jsr-223(scripting for the java platform) 实现(图二)
图2 删除后的目录结构

     目录做好之后,下面开始按照jar规范所描述的service provider方法来创建文件以便于 javax.script.scriptenginemanager 的检索:
  1. 在meta-inf目录下建立一个名称为 services 的目录。
  2. 在 services 目录中新建名称为 javax.script.scriptenginefactory 的空文件。
  3. 在 javax.script.scriptenginefactory 文件中,写入“com.sun.script.javascript.rhinoscriptenginefactory”数据,注意不写引号。

jsr-223(scripting for the java platform) 实现(图三)
图3 新加入的services目录和文件

     最后,将所有改动保存到jsr-223.jar文件中,工作完成!

     3. 测试包

        将jsr-223.jar加入到项目的库中,然后编写下面的代码:
--------------------------------------------------------------------------------
scriptenginemanager manager = new scriptenginemanager();
scriptengine engine = manager.getenginebyname("js");
engine.put("age", 21);
engine.eval("if (age >= 18){ " +
            "  print('old enough to vote!'); " +
            "} else {" +
            "  print ('back to school!');" +
            "}");
--------------------------------------------------------------------------------
这时控制台应返回:old enough to vote! 下面是其在eclipse下运行的截图:
jsr-223(scripting for the java platform) 实现(图四)

点击查看大图

图4 测试程序在eclipse下的运行情况

4. 参考资料:

  1. jsr-223(scripting for the java platform)规范:http://www.jcp.org/en/jsr/detail?id=223
  2. mustang与rhino:java 6中的脚本编写:http://dev2dev.bea.com.cn/techdoc/20060712844.html
  3. jar规范中的service provider描述:http://java.sun.com/j2se/1.5.0/docs/guide/jar/jar.html#service%20provider
  4. 本文的技术支持:中国eclipse社区(http://www.eclipseworld.org)
  5. jsr-223.jar包下载:http://projects.eclipseworld.org/xswt/attachment/jsr-223.jar

 
 
上一篇: try catch finally与return的执行顺序    下一篇: 在nec电话上开发midp程序入门
  相关文档
java中的强大武器--对象的序列化 11-17
利用jconfig获取xml文件中的配置信息 11-17
你如何使用javabean操作数据库? 11-17
将 dbms 存储过程封装为会话 ejb 组件中的方法 11-17
介绍嵌套类和内部类 11-17
java语言中改善代码的质量--重构 11-16
java的事件处理 11-16
文件名到url的转换 11-17
movefolder 方法 11-16
用java开发3d游戏之创建场景 11-16
变态级java程序员面试32问(转) 11-17
j2se中的序列化详解(一) 11-16
加密与解密原理的一个例子 11-17
java applet 编 程 技 巧 11-17
j2se5.0用executor灵活处理事件下发 11-17
用jbuilder2005实现重构之认识重构 11-17
在Eclipse中使用Hibernate插件 03-25
用java编写客户-服务器程序的若干心得 11-17
java平台上的crm系统 11-16
新手入门:java swing的基础知识全接触 11-16
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息