Java可以通过调用JavaScript引擎来执行JavaScript代码并获取结果。在Java中,可以使用Java的内置JavaScript引擎,也可以使用第三方库,如Rhino或Nashorn。
1. 使用Java内置的JavaScript引擎:
Java 6及以上版本中,提供了javax.script包,其中包含了执行JavaScript代码的API。以下是一个简单的示例代码:
`java
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class JavaScriptExecutor {
public static void main(String[] args) {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
try {
// 执行JavaScript代码
Object result = engine.eval("var x = 10; var y = 20; x + y;");
System.out.println("执行结果:" + result);
} catch (ScriptException e) {
e.printStackTrace();
}
}
上述代码中,我们首先通过ScriptEngineManager获取一个JavaScript引擎实例,然后使用eval方法执行JavaScript代码,并将执行结果存储在一个Object对象中。我们可以通过打印输出来查看执行结果。
2. 使用第三方库Rhino:
Rhino是一个开源的JavaScript引擎,由Mozilla开发。它提供了更多的JavaScript特性和功能。以下是一个使用Rhino执行JavaScript代码的示例:
`java
import org.mozilla.javascript.Context;
import org.mozilla.javascript.Scriptable;
import org.mozilla.javascript.ScriptableObject;
public class JavaScriptExecutor {
public static void main(String[] args) {
Context context = Context.enter();
Scriptable scope = context.initStandardObjects();
try {
// 执行JavaScript代码
Object result = context.evaluateString(scope, "var x = 10; var y = 20; x + y;", "JavaScript", 1, null);
System.out.println("执行结果:" + result);
} finally {
Context.exit();
}
}
在上述代码中,我们首先创建一个Context对象,然后使用initStandardObjects方法初始化一个JavaScript的全局作用域。接下来,我们使用evaluateString方法执行JavaScript代码,并将执行结果存储在一个Object对象中。
3. 使用第三方库Nashorn:
Nashorn是Java 8中引入的新的JavaScript引擎,它取代了之前的Rhino引擎。以下是一个使用Nashorn执行JavaScript代码的示例:
`java
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class JavaScriptExecutor {
public static void main(String[] args) {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("nashorn");
try {
// 执行JavaScript代码
Object result = engine.eval("var x = 10; var y = 20; x + y;");
System.out.println("执行结果:" + result);
} catch (ScriptException e) {
e.printStackTrace();
}
}
在上述代码中,我们使用ScriptEngineManager获取一个Nashorn引擎实例,然后使用eval方法执行JavaScript代码,并将执行结果存储在一个Object对象中。
无论使用哪种方式,Java都可以执行JavaScript代码并获取结果。这对于需要在Java应用程序中执行动态脚本或处理复杂的业务逻辑非常有用。