java如何用脚本引擎执行javascript代码

脚本引擎

介绍

JAVA脚本引擎是从JDK6.0之后添加的新功能

什么是脚本引擎?

  • 使得java应用程序可以通过一套固定的接口与各种脚本引擎交互,从而达到在java平台上调用各种脚本语言的目的
  • java脚本API是连通java平台和脚本语言的桥梁
  • 可以把一些复杂易变的业务逻辑交给脚本语言处理,这大大提高了开发效率。

简单说就是脚本引擎是java平台和其他脚本语言平台(例如js平台)的中间平台,里面的变量,java平台可以读,其他脚本语言平台也可以读到。

获得脚本引擎对象

要执行js代码,首先要获得脚本引擎对象:

//获取脚本引擎对象
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine engine = sem.getEngineByName("javascript");
//定义变量,存储到java平台和javascript平台的中间平台,两个平台都可以取到这个变量
engine.put("msg","smart wang ergou is a good man");
//javascript
String str = "var user = {name :'wangErgou',age : 18,schools:['海事大学 ',' 尚学堂 ' ] } ;";
//打印
str += "print(user.name);";
//执行脚本语言
engine.eval(str);
//修改msg变量的值
engine.eval("msg = 'dmu is a good school';");
//获得msg变量的值
System.out.println(engine.get("msg"));

ScriptEngine 脚本引擎有三个常用的方法,put(),get(),eval(),分别对应,定义一个变量,获得一个变量值,执行一段代码。

有了这三个方法,我们可以执行一些简单的js代码。但是我们都知道,js中也是有函数的,该怎样定义和调用一个函数呢?
其实有了eval()方法,就可以定义函数,但是要调用获得返回值,则需要取得Invocable接口,执行接口的invokeFunction()方法,就可以调用函数并取得返回值。

//定义函数
engine.eval("function add(a,b){var sum = a + b; return sum;}");
//执行函数
//取得接口
Invocable jsInvocable = (Invocable)engine;
//执行脚本中定义的方法
Object result = jsInvocable.invokeFunction("add", new Object[] {22,33});
System.out.println(result);

导入包也是正常的操作,使用eval()方法

//导入其他java包,使用其他包中的类
engine.eval("importPackage(java.util); var list = Arrays.asList([\"海事大学  \" ,\"dmu\"])");
List<String> list = (List<String>) engine.get("list");
System.out.println(list);

如果觉得用String写js麻烦,也可以直接执行js文件:

//执行一个js文件(将a.js置于项目的src下)
URL url = test.class.getClassLoader().getResource("a.js");
FileReader fr = new FileReader(url.getPath());
engine.eval(fr);
fr.close();
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值