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

Java 中使用 JavaScript Nashorn 引擎

Nashorn 介绍

Nashorn 是 Java 8 中引入的 JavaScript 引擎,它允许在 Java 应用程序中嵌入和执行 JavaScript 代码。但是在JDK 15 中,Nashorn 已经被移除,取而代之的是新的 JavaScript 引擎,即 GraalVM。如果要继续使用 Nashorn,需要引入相应的依赖。

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

hello world

准备javascript文件,内容如下:

var greeting='hello world';
print(greeting);

在Java 中使用 Nashorn 引擎执行这个文件:

import org.apache.commons.io.FileUtils;import javax.script.*;
import java.io.File;public class TestNashorn {public static void main( String args[] ) throws Exception {ScriptEngine engine = new ScriptEngineManager().getEngineByName("Nashorn");String content = FileUtils.readFileToString(new File(TestNashorn.class.getResource("test.js").getFile()), "UTF-8");Object result = engine.eval(content);System.out.println("result: " + result);}
}

传递参数

准备javascript文件,内容如下:

var greeting='hello ' + name;
print(greeting);
greeting

javascript 中使用了一个变量name,最后返回了greeting。

在Java 中使用 Nashorn 引擎执行这个文件,其中使用 Bindings 传递了name参数,然后获取返回值:

import org.apache.commons.io.FileUtils;import javax.script.*;
import java.io.File;public class TestNashorn {public static void main( String args[] ) throws Exception {ScriptEngine engine = new ScriptEngineManager().getEngineByName("Nashorn");Bindings bind = engine.getBindings(ScriptContext.ENGINE_SCOPE);bind.put("name", "kongxx");String content = FileUtils.readFileToString(new File(TestNashorn.class.getResource("greeting.js").getFile()), "UTF-8");Object result = engine.eval(content);System.out.println("result: " + result);}
}

调用 Java 类和方法

准备javascript文件,其中调用了 Java 中的 Calendar 类,内容如下:

load('nashorn:mozilla_compat.js');
//importPackage(Packages.java.util);
importClass(java.util.Calendar);var cal = Calendar.getInstance();
var time = cal.getTimeInMillis();
print(time);
time

在Java 中使用 Nashorn 引擎执行这个文件,然后获取返回值:

import org.apache.commons.io.FileUtils;import javax.script.*;
import java.io.File;public class TestNashorn {public static void main( String args[] ) throws Exception {ScriptEngine engine = new ScriptEngineManager().getEngineByName("Nashorn");Bindings bind = engine.getBindings(ScriptContext.ENGINE_SCOPE);String content = FileUtils.readFileToString(new File(TestNashorn.class.getResource("javaclass.js").getFile()), "UTF-8");Object result = engine.eval(content);System.out.println("result: " + result);}
}

调用 JavaScript 函数

准备javascript文件,其中定义了两个函数,内容如下:

var func1 = function() {return 'hello world';
}var func2 = function(name) {return 'hello '+ name;
}

在Java 中使用 Nashorn 引擎执行这个文件,其中使用 Invocable 调用函数,并获取返回值:

import org.apache.commons.io.FileUtils;import javax.script.*;
import java.io.File;public class TestNashorn {public static void main( String args[] ) throws Exception {ScriptEngine engine = new ScriptEngineManager().getEngineByName("Nashorn");String content = FileUtils.readFileToString(new File(TestNashorn.class.getResource("function.js").getFile()), "UTF-8");engine.eval(content);Invocable invocable = (Invocable)engine;Object result1 = invocable.invokeFunction("func1");System.out.println("result: " + result1);Object result2 = invocable.invokeFunction("func2", "kongxx");System.out.println("result: " + result2);}
}

http://www.mrgr.cn/news/44878.html

相关文章:

  • 算法笔记(十三)——BFS 解决最短路问题
  • Windows下Jenkins控制台中文乱码
  • XTuner微调个人小助手认知
  • 如何将 cryptopp库移植到UE5内
  • @Transactional声明式事务回调编程
  • SpringBootWeb快速入门!详解如何创建一个简单的SpringBoot项目?
  • Bloom Filter 布隆过滤器
  • 1.两数之和
  • Python中对象obj类型确定最pythonic的方式——isinstance()函数
  • Chrome浏览器调用ActiveX控件--allWebOffice控件功能介绍
  • 联想服务器配置阵列、安装操作系统
  • 【自动驾驶】最近计划看的论文
  • Ajax教程
  • vivado 使用 UltraFast 设计方法系统级设计流程图
  • 图像分割恢复方法
  • 【重学 MySQL】五十九、二进制字符串类型与 JSON 类型
  • 【OpenCV】 Python 图像处理 入门
  • 长空会:儿童身高成长秘籍:彼格高儿童成长奶粉成就孩子美好未来
  • 服务攻防
  • 10.7每日作业