Java 如何调用 JS 方法
在 Java 中调用 JavaScript 方法,可以通过使用 Java 的 ScriptEngine 或者使用开源库 Rhino 实现。下面将分别介绍这两种方法。
1. 使用 ScriptEngine
Java 提供了 ScriptEngine 接口,它是一个通用的脚本引擎框架,可以支持多种编程语言,包括 JavaScript。
步骤:
- 导入相关的类:
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
- 创建 ScriptEngine 对象:
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("javascript");
- 调用 JavaScript 方法:
try {
engine.eval("function sayHello() { return 'Hello, world!'; }");
engine.eval("var result = sayHello();");
String result = (String) engine.get("result");
System.out.println(result);
} catch (ScriptException e) {
e.printStackTrace();
}
解释:
- 首先,导入了
javax.script
包中的相关类,这些类提供了 Java 调用脚本的功能。 - 接下来,创建了一个 ScriptEngineManager 对象,用于获取 ScriptEngine 实例。
- 然后,通过
getEngineByName
方法获取 JavaScript 的 ScriptEngine 实例。 - 调用
eval
方法执行 JavaScript 代码,其中定义了一个名为sayHello
的函数,并在eval
方法中调用该函数,并将结果存储在result
变量中。 - 最后,可以通过
get
方法获取result
变量的值。
2. 使用 Rhino
Rhino 是 Mozilla 开发的一种开源 JavaScript 引擎,它可以与 Java 无缝集成,可以在 Java 中直接调用 JavaScript 方法。
步骤:
- 导入 Rhino 的相关类:
import org.mozilla.javascript.Context;
import org.mozilla.javascript.Scriptable;
- 创建 Context 对象:
Context cx = Context.enter();
- 创建一个顶层的 Scriptable 对象:
Scriptable scope = cx.initStandardObjects();
- 调用 JavaScript 方法:
try {
cx.evaluateString(scope, "function sayHello() { return 'Hello, world!'; }", "script", 1, null);
Object result = cx.evaluateString(scope, "sayHello();", "script", 1, null);
System.out.println(result.toString());
} finally {
Context.exit();
}
解释:
- 首先,导入了
org.mozilla.javascript
包中的相关类,这些类提供了 Rhino 引擎的功能。 - 接下来,创建了一个 Context 对象。Context 是 Rhino 引擎的主要入口点,它提供了执行脚本的环境。
- 然后,通过
initStandardObjects
方法创建了一个顶层的 Scriptable 对象,这个对象可以存储 JavaScript 的全局变量和函数。 - 调用
evaluateString
方法执行 JavaScript 代码,其中定义了一个名为sayHello
的函数,并在第二次调用evaluateString
方法时调用该函数,并将结果存储在result
变量中。 - 最后,通过
toString
方法获取result
变量的字符串表示。
总结
通过使用 ScriptEngine 或者 Rhino 可以在 Java 中调用 JavaScript 方法。ScriptEngine 是 Java 提供的通用脚本引擎框架,而 Rhino 是 Mozilla 开发的 JavaScript 引擎。两种方法都可以实现 Java 调用 JavaScript 的功能,根据需要选择合适的方案即可。