【问题标题】:How do I actually run Rhino?我如何实际运行 Rhino?
【发布时间】: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


【解决方案1】:

Rhino 确实实际上让我从 javascript 脚本运行 java。没什么可做的。 LiveConnect 让您可以访问 java.* 包中的所有内容。如果您希望自己的代码可以访问,您只需将您的类(编译的 Java 代码)添加到应用程序的类路径中。

我想在我的服务器端 nodejs javascript 中调用服务器端 java 方法。

Rhino 是一个 javascript 解释器,意味着它运行 javascript 代码。 V8 是 NodeJS 的 javascript 解释器。您必须选择 Rhino 或 V8。 V8 采用 C++ 语言,并深深嵌入 NodeJS 中。 Rhino 是 Java 语言,不能轻易替换 V8。有项目(长期)将 NodeJS 移植到 Rhino 上,但除非您准备好参与,否则不要等待。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-19
    • 2015-01-06
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 2017-10-28
    相关资源
    最近更新 更多