代码之家  ›  专栏  ›  技术社区  ›  Mohan Narayanaswamy

Java脚本引擎在哪里使用?[关闭]

  •  8
  • Mohan Narayanaswamy  · 技术社区  · 15 年前

    如何有效地使用Java中的“脚本引擎”?

    使用脚本引擎的所有正确用例是什么?

    有没有使用“脚本引擎”的开源项目?

    有一件事让人想到,“闭包,函数式编程”支持是可能的,但它更多的是技术用途而不是“应用需求”。

    可配置插件正常。但是,在高层的许多模式(访问者、装饰者)仍然可以做到这一点。

    我不太清楚这个要求…它可以有效地用于Java EE模式…它可以与现有模式互补。

    此外,我希望看到更多关于一些业务用例的答案。可能就像在销售过程中根据会员资格或地点为产品找到一个复杂的折扣。查找复杂算法的排名。特别是为什么在某些场景中不是Java呢?(或.NET世界中的C)

    4 回复  |  直到 7 年前
        1
  •  12
  •   Peter Mortensen code4jhon    7 年前

    在Java 6中,脚本引擎支持是内置的。例如,

        // Create a script engine manager
        ScriptEngineManager factory = new ScriptEngineManager();
    
        // Create a JavaScript engine
        ScriptEngine engine = factory.getEngineByName("JavaScript");
    
        // Evaluate JavaScript code from String
        engine.eval("print('Hello, World')");
    

    你为什么要用?原因有:

    1. 在脚本语言中有一个库,您想在Java中使用(例如,可以通过Jython运行的Python库)
    2. 您希望为客户提供一个可配置的编程机制,这样他们就可以提供短代码片段。例如,我以前就这样做过,允许客户使用JavaScript编写过滤器(例如,IS X<2和Y>5和Z>10?).
    3. 通过直接在配置文件中编写脚本,可以在Ant等工具中实现更复杂的逻辑。
    4. 您可以使用更适合该域的语言实现解决方案(例如,通过Clojure使用lambdas),但要保持对JVM的依赖。

    实现包括RHIO(JavaScript的Java实现)、Jython(Java Python)以及更多。

        2
  •  9
  •   Willie Wheeler    13 年前

    以下是我使用过的一些案例。

    1)Java想要调用脚本语言,示例1。 我有一个Java应用程序,它通过WMD JavaScript小部件接受用户的评论。(实际上,stackoverflow使用的是相同的小部件。)用户以降价格式输入注释,一个名为showdown的javascript库将其转换为两个位置的HTML:(1)在客户机上,以支持实时预览;(2)在服务器上,因为我希望客户机将纯降价发送到服务器,并将其存储在服务器上,以便用户可以编辑M。稍后关闭(而不是以某种方式将HTML反转为标记)。在服务器上存储注释时,我也会在那里运行转换,并将HTML与标记一起存储,这样在显示注释列表时就不必动态转换标记。为了确保服务器上的HTML与客户机上的HTML匹配,我希望使用完全相同的决战库。所以我在RhinoJavaScript引擎内部运行摊牌服务器端。

    2)Java想要调用脚本语言,示例2。 我正在开发一个部署自动化应用程序,它涉及不同角色的涉众,如开发人员、系统管理员和发布工程师。整个应用程序(工作流和UI)是一个Java应用程序,但在不同的位置,它调用各种脚本(例如Ruby、BASH),例如用于推送包、验证配置、安装包、冒烟测试等。这部分是因为脚本更好地/更经济地用于表示目录创建、复制、移动、WIGET等,以及部分。因为拥有这一特定馅饼的人知道如何使用脚本语言,而不是Java。因此,我们使用Java的脚本API调用脚本。诚然,在这种情况下,我们可以执行Java以外的脚本,但见下面的第3条。

    3)脚本语言想要调用Java。 在前面提到的部署应用程序中,我们有基于Web的部署日志,并且我们花了大量精力使部署日志尽可能容易阅读和理解,因为大型开发人员/sqa/发布工程师群体会消耗这些日志,而不是每个人都能理解部署的所有细节。漂亮的印刷和彩色编码是方法的一部分。我们在Java中实现了一个漂亮的打印部署日志API,但是我们希望脚本能够调用它。例如,当Ruby Push脚本运行时,我们希望它将进度记录到漂亮的打印机上。在JRuby中运行Ruby允许Ruby脚本看到Java漂亮的打印机API。

        3
  •  1
  •   Matthew Flaschen    15 年前

    “使用脚本引擎最合适的用例是什么?”这是一个相当模糊的问题。有很多用例。以下是我能马上想到的几个问题:

    1. 插件/扩展系统
    2. 集成电路设备
    3. 现场演示的编程教程

    我假设你指的是 JSR 223 特别地。如果是这样,你应该看看 scripting.dev.java.net

        4
  •  1
  •   Peter Mortensen code4jhon    7 年前

    我没有专门使用JavaScript,但我已经将groovy集成到我的应用程序框架中,以提供一种特定于域的语言(DSL)。我已经创建了钩住我的应用程序的函数和类。

    允许用户在应用程序(宏)中编写通用操作脚本,并实现轻量级处理,以避免更重的代码编译器JAR部署解决方案。如果用户对我的处理框架有一个插件的想法,他们可以实时地通过Groovy进行原型化,并在有时间(或者需要速度的时候)移回Java(甚至是原生的)。请记住,脚本的速度通常要比Java/C/Y/C/C++慢一些。