热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在JAVA中调用JavaScript代码

在JAVA中调用JavaScript代码有些时候,我们在执行JAVA代码的时候,希望能够通过执行其他脚本语言(如js,修改脚本新逻辑立即生效ÿ
在JAVA中调用Javascript代码

有些时候,我们在执行JAVA代码的时候,希望能够通过执行其他脚本语言(如js, 修改脚本新逻辑立即生效,不需要重新加载)根据其结果来进行逻辑判断,自java SE 8开始已经集成了Nashorn Javascript引擎作为JDK的一部分。

1.使用nashorn引擎


1.1直接执行脚本


1.1.1查询引擎使用nashorn

public static void main(String[] args) throws Exception {ScriptEngineManager scriptEngineManager = new ScriptEngineManager();ScriptEngine scriptEngine =scriptEngineManager.getEngineByName("nashorn");//执行脚本scriptEngine.eval("print('Hello,World')");
}

1.1.2查询引擎使用Javascript

public static void main(String[] args) throws Exception {
ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("Javascript");
//执行脚本
scriptEngine.eval("print('Hello,World')");
}

1.2 执行脚本指定函数


1.2.1查询引擎使用nashorn

public static void main(String[] args) throws Exception {ScriptEngineManager scriptEngineManager = new ScriptEngineManager();ScriptEngine scriptEngine =scriptEngineManager.getEngineByName("nashorn");//传入脚本scriptEngine.eval("function hello(name){print('Hello,'+ name )}");//ScriptEngine强转为InvocableInvocable inv = (Invocable) scriptEngine;//调用函数,传入参数inv.invokeFunction("hello", "Javascript");}

1.2.2查询引擎使用Javascript

public static void main(String[] args) throws Exception {ScriptEngineManager scriptEngineManager = new ScriptEngineManager();ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("nashorn");//传入脚本scriptEngine.eval("function hello(param) {\n" +" if(param == '123') {\n" +" return true;\n" +" }\n" +" return false;\n" +"}");//ScriptEngine强转为InvocableInvocable inv = (Invocable) scriptEngine;//调用函数,传入参数boolean result = (Boolean) inv.invokeFunction("hello", "12");System.out.println(result);

1.3 获取的都是nashorn引擎

//获取的都是nashorn引擎scriptEngineManager.getEngineByName("nashorn");scriptEngineManager.getEngineByName("Javascript");

NashornScriptEngineFactory截图

NashornScriptEngineFactory截图

2. 使用脚本语言的优点


  1. 脚本语言可以直接运行,不需要编译为字节码,如果修改了逻辑不需要重新启动应用,立刻生效
  2. 动态类型,创建变量不需要创建及声明类型,可以重复使用变量

参考
https://docs.oracle.com/javase/8/docs/technotes/guides/scripting/prog_guide/about.html#sthref8
https://docs.oracle.com/javase/8/docs/technotes/guides/scripting/prog_guide/api.html#CDEGJDJF


推荐阅读
author-avatar
浩斯科技
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有