快速业务通道

Java SE 6新特性: 对脚本语言的支持 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
的目的就在于统一 Java 平台与各种脚本引擎的交互方式,制定一个标准,Java 应用程序依照这种标准就能自由的调用各种脚本引擎,而脚本引擎按照这种标准实现,就能被 Java 平台支持。每一个脚本引擎就是一个脚本解释器,负责运行脚本,获取运行结果。ScriptEngine 接口是脚本引擎在 Java 平台上的抽象,Java 应用程序通过这个接口调用脚本引擎运行脚本程序,并将运行结果返回给虚拟机。

ScriptEngine 接口提供了许多 eval 函数的变体用来运行脚本,这个函数的功能就是获取脚本输入,运行脚本,最后返回输出。清单 1 的例子中直接通过字符串作为 eval 函数的参数读入脚本程序。除此之外,ScriptEngine 还提供了以一个 java.io.Reader 作为输入参数的 eval 函数。脚本程序实质上是一些可以用脚本引擎执行的字节流,通过一个 Reader 对象,eval 函数就能从不同的数据源中读取字节流来运行,这个数据源可以来自内存、文件,甚至直接来自网络。这样 Java 应用程序就能直接利用项目原有的脚本资源,无需以 Java 语言对其进行重写,达到脚本程序与 Java 平台无缝集成的目的。清单 2 即展示了如何从一个文件中读取脚本程序并运行,其中如何通过 ScriptEngineManager 获取 ScriptEngine 实例的细节会在后面详细介绍。

清单 2. Run Script

public class RunScript {   public static void main(String[] args) throws Exception {     String script = args[0];     String file = args[1];     FileReader scriptReader = new FileReader(new File(file));     ScriptEngineManager manager = new ScriptEngineManager();     ScriptEngine engine = manager.getEngineByName(script);     engine.eval(scriptReader);   } }

清单 2 代码,从命令行分别获取脚本名称和脚本文件名,程序通过脚本名称创建对应的脚本引擎实例,通过脚本名称指定的脚本文件名读入脚本程序运行。运行下面这个命令,就能在 Java 平台上运行所有的 JavaScript 脚本。

java RunScript javascript run.js

通过这种方式,Java 应用程序可以把一些复杂易变的逻辑过程,用更加灵活的弱类型的脚本语言来实现,然后通过 javax.Script 包提供的 API 获取运行结果,当脚本改变时,只需替换对应的脚本文件,而无需重新编译构建项目,好处是显而易见的,即节省了开发时间又提高了开发效率。

EngineScript 接口分别针对 String 输入和 Reader 输入提供了三个不同形态的 eval 函数,用于运行脚本:

表 1. ScriptEngine 的 eval 函数

函数 描述
Object eval(Reader reader) 从一个 Reader 读取脚本程序并运行
Object eval(Reader reader, Bindings n) 以 n 作为脚本级别的绑定,从一个 Reader 读取脚本程序并运行
Object eval(Reader reader, ScriptContext context) 在 context 指定的上下文环境下,从一个 Reader 读取脚本程序并运行
Object eval(String script) 运行字符串表示的脚本
Object eval(String script, Bindings n) 以 n 作为脚本级别的绑定,运行字符串表示的脚本
Object eval(String script, ScriptContext context) 在 context 指定的上下文环境下,运行字符串表示的脚本

Java 脚本 API 还为 ScriptEngine 接口提供了一个抽象类 —— AbstractScriptEngine,这个类提供了其中四个 eval 函

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号