当前位置:首页 > Java > 正文

Java Nashorn引擎入门指南(手把手教你用Java调用JavaScript)

在 Java 8 中,Oracle 引入了一个全新的 JavaScript 引擎——Nashorn,用于替代老旧的 Rhino 引擎。Nashorn 基于 JSR-292(动态语言支持)实现,性能更高、兼容性更好,能够让你在 Java 应用中无缝执行 JavaScript 代码。本文将带你从零开始,轻松掌握 Java Nashorn引擎 的基本使用方法。

Java Nashorn引擎入门指南(手把手教你用Java调用JavaScript) Nashorn引擎 JavaScript引擎Java Nashorn教程 Java调用JavaScript 第1张

什么是 Nashorn?

Nashorn(发音为“nas-horn”,意为“犀牛角”)是 Java 平台内置的高性能 JavaScript 引擎。它完全兼容 ECMAScript 5.1 标准,并能与 Java 对象无缝交互。通过 Nashorn,你可以在 Java 程序中动态执行 JavaScript 脚本,实现灵活的业务逻辑配置或脚本扩展功能。

环境准备

Nashorn 自 Java 8 起就已内置,因此你只需安装 JDK 8 或 JDK 11 即可使用。注意:从 Java 15 开始,Nashorn 已被移除,但你可以通过独立的 nashorn-core Maven 依赖继续使用。

第一个 Nashorn 示例

下面是一个最简单的例子,展示如何在 Java 中执行一段 JavaScript 代码:

import javax.script.ScriptEngine;import javax.script.ScriptEngineManager;import javax.script.ScriptException;public class NashornDemo {    public static void main(String[] args) {        // 获取 Nashorn 引擎        ScriptEngineManager manager = new ScriptEngineManager();        ScriptEngine engine = manager.getEngineByName("nashorn");        try {            // 执行 JavaScript 代码            engine.eval("print('Hello from JavaScript in Java!');");        } catch (ScriptException e) {            e.printStackTrace();        }    }}

运行上述代码,控制台将输出:Hello from JavaScript in Java!

Java 与 JavaScript 互操作

Nashorn 最强大的功能之一是允许 Java 和 JavaScript 相互调用。你可以将 Java 对象传入 JavaScript 环境,也可以在 JavaScript 中创建 Java 对象。

import javax.script.ScriptEngine;import javax.script.ScriptEngineManager;import javax.script.ScriptException;import javax.script.Bindings;public class InteropDemo {    public static void main(String[] args) {        ScriptEngineManager manager = new ScriptEngineManager();        ScriptEngine engine = manager.getEngineByName("nashorn");        // 将 Java 变量绑定到 JavaScript 上下文        Bindings bindings = engine.createBindings();        bindings.put("name", "Alice");        bindings.put("age", 25);        try {            engine.eval(                "var message = 'Hello, ' + name + '! You are ' + age + ' years old.';\n" +                "print(message);",                bindings            );        } catch (ScriptException e) {            e.printStackTrace();        }    }}

这段代码会输出:Hello, Alice! You are 25 years old.

从 JavaScript 调用 Java 方法

你甚至可以在 JavaScript 中直接调用 Java 类和方法:

engine.eval(    "var ArrayList = Java.type('java.util.ArrayList');\n" +    "var list = new ArrayList();\n" +    "list.add('Java');\n" +    "list.add('Nashorn');\n" +    "print('List size: ' + list.size());");

输出结果为:List size: 2

注意事项与替代方案

虽然 Nashorn 在 Java 8 和 11 中表现优异,但自 Java 15 起已被官方移除。如果你使用的是较新版本的 JDK,可以通过添加以下 Maven 依赖继续使用:

<dependency>    <groupId>org.openjdk.nashorn</groupId>    <artifactId>nashorn-core</artifactId>    <version>15.4</version></dependency>

总结

通过本教程,你应该已经掌握了 Java调用JavaScript 的基本方法,并了解了如何利用 JavaScript引擎Java 实现动态脚本功能。Nashorn 是一个强大而灵活的工具,特别适合需要运行时配置或插件化架构的应用场景。

无论你是想实现规则引擎、动态表单验证,还是构建可扩展的系统,Nashorn教程 都为你打开了新世界的大门。赶快动手试试吧!