我知道我们可以使用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的真实场景?请详细说明。
答案 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服务器,因此一直在实时使用它。