【发布时间】:2011-08-08 15:55:51
【问题描述】:
我已阅读此处的文档:Mozilla's 'Scripting Java'
这些例子也不能回答我的问题:Rhino Liveconnect example
例如,我的 javascript 文件如何知道在哪里可以找到“java.lang”?当然,它可以在 Rhino shell 中运行,但我需要从我的 javascript 文件中运行 java 代码,而不是从 shell 中运行。我只能在下载的源代码中看到 .java 文件。
我想在我的服务器端 nodejs javascript 中调用服务器端 java 方法。是不是需要启动 Rhino 才能让我的 javascript 具备理解 java 的能力?
编辑: @eee所以如果我理解正确,Rhino实际上并没有让我从javascript运行java,它只是将我所有的javascript翻译成java .class文件......毕竟我必须在java文件中执行?这违背了从 javascript 调用 java 的目的。整个想法是能够从我的 javascript 代码中调用任何 java 代码,而无需构建新的 java 库。
那不是说我不能用 Rhino 吗? Nodejs 使用 V8 引擎来执行 javascript,所以我假设一个 javascript 文件不能同时被 V8 和 Rhino 使用......我希望我可以调用 java 方法,这将启动 Rhino 来翻译这些调用到爪哇。 然后,Java 本身将返回填充了一些数据的变量。
@Peter:为什么是 http 调用?我的 javascript 和我的 java 现在都位于同一台服务器上。无论如何,你所说的并不完全需要 Rhino,不是吗?我会创建一堆 .class 文件,然后调用 'java myfile.class -v "firstvar" -x "secondvar"'.. 我理解正确吗?
【问题讨论】:
-
您需要在Java应用程序中使用Java Scripting API“加载”Rhino引擎,然后才能在Java环境下正常执行Javascript(如上例)。
-
您只能运行
.class文件而不是.java,因为它不是脚本语言。如果要在服务器上运行方法,则需要将请求传递给服务器。一定有一个 javascript 库,它比你自己的 http 调用更容易,但我不知道它是什么。 -
如果没有 Rhino 作为脚本引擎,运行带有 Java 引用的 JavaScript 脚本将无法运行。您需要: (1) 使用 Rhino 编译器编译您的 Javascript 脚本,使其成为可以使用 java.exe 执行的 Java .class 文件;或 (2) 通过 Rhino shell 解释器运行脚本;或 (3) 在 Java 应用程序下使用 Java 脚本支持加载 Rhino 引擎并在脚本上执行
eval()。 -
@eee @Peter:我会编辑我的问题,因为 cmets 框中的空间太小了。
-
阅读您编辑的帖子后:是的,确实如此。如果您尝试使用 Java 的 Python 引擎
Jython,情况也是如此。
标签: java javascript rhino liveconnect