使用 Rhino(Mozilla 的 rhino)的优点

Posted

技术标签:

【中文标题】使用 Rhino(Mozilla 的 rhino)的优点【英文标题】:Advantages of using Rhino (mozilla's rhino) 【发布时间】:2010-12-01 02:57:41 【问题描述】:

我一直在阅读有关 Rhino 作为在我的 Java 代码中实现 javascript 的有用方法的文章。

在阅读了一段时间后,在 google 和 here 中搜索,我找不到在 Java 中使用 JavaScript 的真正原因。

您能否指出将 Rhino 用于常规 Java 应用程序的一些实际优势?

【问题讨论】:

除了别人说的,游戏开发就是一个很好的例子。出于多种原因,拥有外部脚本是游戏开发中非常常见的做法,如果您使用 Java 编写游戏并希望使用 JavaScript 作为脚本语言,Rhino 非常棒。 【参考方案1】:

将像 javascript 这样的脚本语言嵌入到您的软件中的好处是,您可以为其他人提供一种为您的软件编写插件的方法,而无需泄露源代码。

使用另一种语言编写整个应用程序的一个原因是,您可以为一家公司编写一个应用程序,该公司将其部署在其 Java EE 环境中,而无需学习 Java。

【讨论】:

要让其他人在不泄露源代码的情况下插入您的应用程序,您只需要一个带有一些接口的包。 IBM Maximo 7.5 + 做到了这一点(Rhino 或 Jython),另外的好处是您可以避免定制他们的软件,从而使升级更顺畅。【参考方案2】:

请注意,从 Java 6 开始,脚本 API 位于标准 Java 库中 - 请参阅包 javax.script 的文档。 javax.script 中的 API 是 Rhino 的改编版本。脚本 API 不仅支持 JavaScript,还支持许多其他脚本语言。

见Java Scripting Programmer's Guide

那里的首页提到了您可能想要使用脚本的一些原因:

应用程序扩展/自定义:您可以“外部化”应用程序的某些部分,例如金融应用程序的配置脚本、业务逻辑/规则和数学表达式。 应用程序的“命令行”shell - 用于调试、运行时/部署时间配置等。如今,大多数应用程序都有基于 Web 的 GUI 配置工具。但是系统管理员/部署者经常更喜欢命令行工具。与其为此目的发明专门的脚本语言,不如使用“标准”脚本语言。

示例:您可以使用 Python 脚本编写 Oracle Weblogic 脚本,例如配置应用服务器域、启动或停止服务器以及执行其他管理任务。

【讨论】:

这些其他语言是什么? @WesleiPrudencio 见***.com/questions/11838369/…【参考方案3】:
    与大多数 Java XML API 相比,使用 Rhino 和 E4X 处理 XML 是一种乐趣 您拥有“正常工作”的现有 JavaScript,并且您不想重新编写它。如果您在客户端进行一些计算或处理并将其移至服务器,则可能会发生这种情况。 各种巧妙的缓存和代码加载技巧。 使用比 Java 更动态的语言可以更好地解决您的问题。 列表推导 ;)

【讨论】:

你是对的。我会使用 Jython 而不是 JavaScript 来涵盖您给出的大部分观点。但你可能是一个 java 人不会。【参考方案4】:

我们在我们的一个产品中使用 JS(通过 Rhino)作为 DSL。它不是一个很好的 DSL,但这是我们使用 JS 的方式,而不是 Rhino 的错误。

【讨论】:

我很简短,但我不清楚 DSL 在这种情况下指的是什么。你愿意开导我吗? DSL = 领域特定语言。基本上,我们需要一种允许人们表达规则的语言。 Javascript 很好,因为它很容易通过指定全局上下文中的内容来设置用户可以做什么和不可以做什么。不需要包含。【参考方案5】:

如果你也考虑.Net,我建议和Rhino相处。

除了 Java 环境,rhino 是 .NET 环境(使用 IKVM)上性能最好的解释器之一。另一方面,nashorn 在 .net 上非常慢。

将您自己的 Rhino 项目移植到 .NET 并不是那么困难。

【讨论】:

以上是关于使用 Rhino(Mozilla 的 rhino)的优点的主要内容,如果未能解决你的问题,请参考以下文章

Mozilla Rhino 教程

JavaScript (Rhino) 使用库或包含其他脚本

java util - 在java代码中执行javascript代码工具 rhino-1.7.7.jar

Rhino:如何从 Java 调用 JS 函数

用 Rhino 解释 Java 中的 JavaScript:暂停/恢复脚本

rhino(犀牛)指令栏