如何在 Java 中使用 JavaScript?

IT技术 java javascript apache object
2021-01-13 15:03:59

我想构建一个小产品,我想在其中提供一种功能,用户可以在其中编写脚本语言类型的 JavaScript。

并且还可以从 JavaScript 构建对象并在其上调用方法。

有没有这方面的框架?

4个回答

犀牛就是你要找的。

Rhino 是完全用 Java 编写的 JavaScript 的开源实现。它通常嵌入到 Java 应用程序中以向最终用户提供脚本。

更新:现在Nashorn是用于 Java 的性能更高的 JavaScript 引擎,可用于 jdk8。

使用犀牛,我可以在 Java 对象中运行最基本的脚本结构吗......
2021-03-14 15:03:59
是的你可以。请参阅此处:mozilla.org/rhino/ScriptingJava.html
2021-04-02 15:03:59

Java 包含一个从版本 6 开始脚本语言扩展包

有关在 Java 中嵌入 JavaScript 解释器的信息,请参阅Rhino 项目文档

[编辑]

下面是一个关于如何将 Java 对象公开给解释脚本的小示例:

public class JS {
  public static void main(String args[]) throws Exception {
    ScriptEngine js = new ScriptEngineManager().getEngineByName("javascript");
    Bindings bindings = js.getBindings(ScriptContext.ENGINE_SCOPE);
    bindings.put("stdout", System.out);
    js.eval("stdout.println(Math.cos(Math.PI));");
    // Prints "-1.0" to the standard output stream.
  }
}
+1 另请参阅这个小的ScriptEngine 示例
2021-03-27 15:03:59

您可以使用ScriptEngine,例如:


public class Main {
    public static void main(String[] args) {
        StringBuffer javascript = null;
        ScriptEngine runtime = null;

        try {
            runtime = new ScriptEngineManager().getEngineByName("javascript");
            javascript = new StringBuffer();

            javascript.append("1 + 1");

            double result = (Double) runtime.eval(javascript.toString());

            System.out.println("Result: " + result);
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
    }
}

这就像在java中进行javascript评估并获得结果。如果我想直接在 javascript 中使用 java 对象怎么办?.....
2021-03-21 15:03:59
阅读文档——另一个答案中提供的 Rhino 链接在前几段中讨论了这一点。
2021-03-25 15:03:59

我只是想为这个问题回答一些新的东西 - J2V8

作者 Ian Bull 说:“Rhino 和 Nashorn 是两种常见的 JavaScript 运行时,但它们在许多方面都不符合我们的要求:

都不支持“原语”。与这些平台的所有交互都需要包装类,例如 Integer、Double 或 Boolean。Android 不支持 Nashorn。Android 不支持 Rhino 编译器优化。这两个引擎都不支持在 Android 上进行远程调试。""

高效的 Java 和 JavaScript 集成

Github 链接