java javascript引擎_Java动态性(3) - 脚本引擎执行javascript代码

1.脚本引擎执行JavaScript代码

脚本引擎介绍

使得Java应用程序可以通过一套固定的接口与各种脚本引擎交互,从而达到在Java平台上调用各种脚本语言的目的

Java脚本API是连通Java平台和脚本语言的桥梁

可以吧一些复杂异变的业务逻辑交给脚本语言处理,这又大大提高了开发效率

获得脚本引擎对象

ScriptEngineManager sem = new ScriptEngineManager();

ScriptEngine engine = sem.getEngineByName("javascript");

Java脚本API为开发者提供了如下功能:

获取脚本程序输入,通过脚本引擎运行脚本并返回运行结果,这是最核心的接口

注意是:接口 Java可以使用各种不同的实现,从而通用的调用js,groovy,python等脚本

Rhino是一种使用Java语言写的JavaScript的开源实现,原先由Mozilla开发,现在被集成进入JDK6.0以及以上版本

通过脚本引擎的运行上下文在脚本和Java平台间交换数据

通过Java应用程序调用函数脚本

a.js

function test(){

var a = 3;

var b = 4;

print("invoke js file:"+(a+b));

}

test();

import java.io.FileReader;

import java.net.URL;

import javax.script.Invocable;

import javax.script.ScriptEngine;

import javax.script.ScriptEngineManager;

public class JavaScript {

public static void main(String[] args) throws Exception {

//获得脚本引擎对象

ScriptEngineManager sem = new ScriptEngineManager();

ScriptEngine engine = sem.getEngineByName("javascript");

//定义变量,存储在引擎上下文中

engine.put("msg", "I am a good man!");

String str = "var user = {name:'Matrix42',age:18,schools:['清华大学','北京大学']};";

str+= "print(user.name);";

engine.eval(str);

engine.eval("msg = 'Ha Ha';");

System.out.println(engine.get("msg"));

//定义函数

engine.eval("function add(a,b){var sum = a + b; return sum;}");

//取得调用接口

Invocable jsInvocable = (Invocable) engine;

//执行脚本中定义的方法

Object result = jsInvocable.invokeFunction("add", new Object[]{13,20});

System.out.println(result);

//导入其他java包,使用其他包中的java类,如果想要深入了解可以学习Rhino

//查资料说jdk8好像不支持,jdk7支持

//- If you need JavaScript, use Java 7.

//- If you need Java 8, don't use JavaScript.

/*String jsCode = "importPackage(java.util);var list=Arrays.asList([\"北京大学\",\"清华大学\"]);";

engine.eval(jsCode);

List list = (List) engine.get("list");

for(String string:list){

System.out.println(string);

}*/

//执行一个js文件(将js放到src下即可)

URL url = JavaScript.class.getClassLoader().getResource("a.js");

FileReader fr = new FileReader(url.getPath());

engine.eval(fr);

fr.close();

}

}

2.Rhino介绍

Rhino是一种使用java语言编写的JavaScript的开源实现,原先由Mozilla开发,现在被集成进入JDK6.0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值