在Java中使用ScriptEngineManager的真实生活场景

时间:2015-10-14 12:24:46

标签: java scriptengine

我知道我们可以使用ScriptEngineManager来执行脚本,例如:java script。

import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;

public class Test {
  public static void main(String[] args) throws Exception{
    ScriptEngineManager mgr = new ScriptEngineManager();
    ScriptEngine engine = mgr.getEngineByName("JavaScript");
    String foo = "40+2";
    System.out.println(engine.eval(foo));
    } 
}

但这是一个非常简单的例子,我不确定可以使用ScriptEngineManager的真实场景?请详细说明。

3 个答案:

答案 0 :(得分:0)

有许多可能的用途。例如:自动化。 Microsoft Office程序和Adobe Photoshop可以运行脚本来自动执行程序的功能。您可以将Java脚本引擎API用于Java应用程序中的类似内容。

我在一个项目中使用过一次,我们的软件必须进行一些复杂的数据处理。可以通过运行脚本来定制处理的某些部分。这样做的好处是可以轻松修改脚本;如果我们用Java编写自定义处理,这意味着每当需要进行一些小的改动时,我们就必须对系统进行全新的构建。

答案 1 :(得分:0)

让我尝试从我的项目角度回答这个问题。 我们有一个框架,该框架将进行出站调用,并允许集成商从json响应中提取部分并将其映射到内部数据模型中。

这完全是由元数据驱动的,集成商使用jsonpath(类似于xpath,但对于json)来指定要提取的内容以及将其映射到的内容。

但是有时候,集成商希望有条件地指定其中的一些。 例如,如果提取的json值为null,则我希望模型具有0。 如果数组长度为0,那么我想使用某个值。

我们已将这些逻辑公开为javascript。我们使用此引擎执行javascript,以发现inetgrator想要对数据进行什么操作(基本上,我们对获得的数据执行集成商提供的脚本,并在模型上设置该值,最终将其持久化)

希望这能回答您的问题。

答案 2 :(得分:0)

由于存在差异,因此Java是静态类型的,这意味着以Java编写的程序首先要编译然后运行,但是对于动态类型的语言(例如JavaScript和Python),我们甚至可以为它没有作为一个整体进行编译。 谈到这个问题,假设您有一台服务器(例如:WildFly)在其上部署了应用程序。现在,构建和托管是一个耗时的过程,因此,如果必须进行一些小的更改,则必须重新构建它,然后再次执行该耗时的过程,但是如果可以就地使用任何动态类型的语言(例如JavaScript)其中,它不会花费时间,并且在下一个实现中,您已经准备好使用更新的代码。这是使用JS的主要优点,因此JSEngine中添加了ScriptEngine。

目前,我正在与JBoss合作,将ScriptEngine功能添加到其WildFly服务器,因此一直在实时使用它。