动态调用动态语言之Java脚本API
日期:2007年9月22日 作者: 查看:[大字体 中字体 小字体]-
jsEngine.eval("println('Hello from JavaScript')");
}
脚本执行上下文
HelloScriptingWorld 应用程序中的示例脚本 使用 JavaScript println() 函数向控制台输出结果,但是我们拥有输入和输出流的完全控制权。脚本引擎提供了一个选项用于修改脚本执行的上下文,这意味着我们可以修改标准输入流、标准输出流和标准错误流,同时还可以定义哪些全局变量和 Java 对象对正在执行的脚本可用。
invokeHelloScript() 方法中的 JavaScript 将 Hello from JavaScript 输出到标准输出流,在本例中为控制台窗口。(清单 6 含有运行 HelloScriptingWorldApplication 时的完整输出。)
注意,类中的这一方法和其他方法都声明抛出了 javax.script.ScriptException。这个选中的异常(脚本包中定义的惟一一个异常)表示引擎无法解析或执行给定的代码。所有脚本引擎 eval() 方法都声明抛出一个 ScriptException,因此我们的代码需要适当处理这些异常。
清单 3 显示了两个有关的方法:defineScriptFunction() 和 invokeScriptFunctionFromEngine()。defineScriptFunction() 方法还使用一段硬编码的 JavaScript 代码调用脚本引擎的 eval() 方法。但是有一点需要注意,该方法的所有工作只是定义了一个 JavaScript 函数 sayHello()。并没有执行任何代码。sayHello() 函数只有一个参数,它会使用 println() 语句将这个参数输出到控制台。脚本引擎的 JavaScript 解释器将这个函数添加到全局环境,以供后续的 eval 调用使用(该调用发生在 invokeScriptFunctionFromEngine() 方法中,这并不奇怪)。
清单 3. defineScriptFunction 和 invokeScriptFunctionFromEngine 方法
private static void defineScriptFunction(ScriptEngine engine) throws ScriptException {
// Define a function in the script engine
engine.eval(
"function sayHello(name) {" +
" println('Hello, ' + name)" +
"}"
);
}
private static void invokeScriptFunctionFromEngine(ScriptEngine engine)
throws ScriptException
{
engine.eval("sayHello('World!')");
}
这两个方法演示了脚本引擎可以维持应用程序组件的状态,并且能够在后续的 eval() 方法调用过程中使用其状态。invokeScriptFunctionFromEngine() 方法可以利用所维持的状态,方法是调用定义在 eval() 调用中的 sayHello() JavaScript 函数。
许多脚本引擎在 eval() 调用之间维持全局变量和函数的状态。但是有一点值得格外注意,Java 脚本 API 并不要求脚本引擎提供这一特性。本文中所使用的 JavaScript、Groovy 和 JRuby 脚本引擎确实在 eval() 调用之间维持了这些状态。
清单 4 中的代码在前一个示例的基础上做了几分修改。原来的 invokeScriptFunctionFromJava() 方法在调用 sayHello() JavaScript 函数时没有使用 ScriptEngine 的 eval() 方法或 JavaScript 代码。与此不同,清单 4 中的方法使用 Java 脚本 API 的 javax.script.Invocable 接口调用由脚本引擎所维持的函数。invokeScriptFunctionFromJava() 方法将脚本引擎对象传递给 Invocable 接口,然后对该接口调用 invokeFunction() 方法,最终使用给定的参数调用 sayHello() JavaScript 函数。如果调用的函数需要返回值,则 invokeFunction() 方法会将值封装为 Java 对象类型并返回。
- 上一页 [1] [2] [3] [4] [5] [6] [7] [8] 下一页
- 动态调用动态语言之Java脚本API 相关文章:
- ·Vista系统实现自动关机技巧
- ·Flash制作交互动画教程 星座查询器
- ·小技巧让你轻松DIY你的网页滚动条
- ·Coreldraw结合 R.A.V.E 制作动画
- ·动态加载外部css或js文件
- ·怎么样清除能突破主动防御的新型木马
- ·Flash与Photoshop合作制作模糊渐变动画
- ·再谈用Flash引导线制作爱心图案动画
- ·Flash用鼠标控制图片移动效果动画教程
- ·Flash引导线制作爱心图案动画
- 动态调用动态语言之Java脚本API 相关软件
- ·《黑名单上的人》05蘑菇行动(198303版)
- ·《黑名单上的人》01特别行动小组(198208版)
- ·《彩虹岛》1.13升级至1.14手动更新补丁
- ·《动物丛林》小游戏
- ·动脑筋爷爷8
- ·动脑筋爷爷7
- ·动脑筋爷爷6
- ·动脑筋爷爷5
- ·动脑筋爷爷4
- ·动脑筋爷爷3
上一篇:详细讲解PHP中缓存技术的应用
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
精品推荐
热点TOP10
- ·JAVA教程 第五讲 AWT图形用户界面设计
- ·SP 短信开发-基础知识篇
- ·使用JAVAMAIL发邮件的一个例子(转)
- ·J2ME蓝牙程序开发实战入门
- ·用Java实现音频播放
- ·使用SimpleDateFormat必须注意的问题
- ·Sun:JavaFX Mobile和JavaFX Script
- ·Java EE6提案的两大主题:拓展性和概要
- ·Java会因为RoR的流行而过时吗?
- ·Java资料:Swing中的事件处理详细资料
- ·Java知识:Web应用下实现定时任务简便方法
- ·技巧:Java中用动态代理类实现记忆功能
- ·新手入门:写Java程序的三十个基本规则
- ·入门:Java初学者入门要注意的基础知识
- ·Java SE 6中XML数字签名标准Java接口
- ·JForum 2.1.7 源程序编译草记
- ·Spring中的Template和Callback模式
- ·从集合类的升级联想到Java适配器模式
- ·I18N-国际化消息和日志
- ·通过JDMK 进行遗留系统管理
特别推荐
- ·Java精华积累:初学者都应该搞懂的问题
- ·Java多媒体框架设计自动播放机实例详解
- ·如何有效防止Java程序源码被人偷窥?
- ·Cell插件在J2EE系统中的应用
- ·初学者想学Hibernate,初级基础教程
- ·Java语言实现支持视频点播的WEB服务器
- ·关于Java编程的中文问题的几条分析原则
- ·确保J2ME无线移动商业应用程序的安全性
- ·Java开源技术:Eclipse的使用技巧详解
- ·新手入门:Java中的修饰词使用方法总结
- ·JAVA开发者应该去的20个英文网站
- ·使用JDBC创建数据库访问程序
- ·JDK的命令详解
- ·Java学习从入门到精通(附FAQ)
- ·Tomcat性能调整
- ·JSF:Java中面向Web开发的生旦净末丑
- ·对Java语言入门初学者的一些建议
- ·Java技术的新方向
- ·Jive源代码研究
- ·谨慎使用Date和Time类
