快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
ndings 这两个接口,在例子脚本中并没有定义 greeting 这个变量,但是脚本通过 Java 脚本 API 能方便的存取 Java 应用程序中的对象,输出 greeting 相应的值。运行这个程序后,能看到输出为:

图 4. 程序 ScopeTest 的输出

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

除了能在 Java 平台与脚本程序之间的提供共享属性之外,ScriptContext 还允许用户重定向引擎执行时的输入输出流:

表 4. ScriptContext 输入输出重定向

函数 描述
void setErrorWriter(Writer writer) 重定向错误输出,默认是标准错误输出
void setReader(Reader reader) 重定向输入,默认是标准输入
void setWriter(Writer writer) 重定向输出,默认是标准输出
Writer getErrorWriter() 获取当前错误输出字节流
Reader getReader() 获取当前输入流
Writer getWriter() 获取当前输出流

Java SE 6新特性: 对脚本语言的支持(6)

时间:2011-02-15 IBM 邱小侠

清单 4 展示了如何通过 ScriptContext 将其对应的 ScriptEngine 标准输出重定向到一个 PrintWriter 中,用户可以通过与这个 PrintWriter 连通的 PrintReader 读取实际的输出,使 Java 应用程序能获取脚本运行输出,满足更加多样的应用需求。

清单 4. 重定向脚本输出

import java.io.*; import javax.script.*; public class Redirectory {   public static void main(String[] args) throws Exception {     ScriptEngineManager manager = new ScriptEngineManager();     ScriptEngine engine = manager.getEngineByName("javascript");     PipedReader pr = new PipedReader();     PipedWriter pw = new PipedWriter(pr);     PrintWriter writer = new PrintWriter(pw);     engine.getContext().setWriter(writer);     String script = "println(''Hello from JavaScript'')";     engine.eval(script);     BufferedReader br =new BufferedReader(pr);     System.out.println(br.readLine());   } }

Java 脚本 API 分别为这两个接口提供了一个简单的实现供用户使用。SimpleBindings 通过组合模式实现 Map 接口,它提供了两个构造函数。无参构造函数在内部构造一个 HashMap 实例来实现 Map 接口要求的功能;同时,SimpleBindings 也提供了一个以 Map 接口作为参数的构造函数,允许任何实现 Map 接口的类作为其组合的实例,以满足不同的要求。SimpleScriptContext 提供了 ScriptContext 简单实现。默认情况下,它使用了标准输入、标准输出和标准错误输出,同时维护一个 SimpleBindings 作为其引擎级别的 Bindings,它的默认全局级别 Bindings 为空。

脚本引擎可选的接口

在 Java 脚本 API 中还有两个脚本引擎可以选择是否实现的接口,这个两个接口不是强制要求实现的,即并非所有的脚本引擎都能支持这两个函数,不过 Java SE 6 自带的 JavaScript 引擎支持这两个接口。无论如何,这两个接口提供了非常实用的功能,它们分别是:

Invocable 接口:允许 Java 平台调用脚本程序中的函数或方法。

Compilable 接口:允许 Java 平台编译脚本程序,供多次调用。

Invocable 接口

有时候,用户可能并不需要运行已有的整个脚本程序,而仅仅需要调用其中的一个过程,或者其中某个对象的方法,这个时候 Invocable 接口就能发挥作用。它提

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号