Java学习之动态编译-动态脚本引擎-脚本引擎执行javascript代码

脚本引擎执行javascript代码

  1. JAVA脚本引擎是从JDK6.0之后添加的新功能。
  2. 脚本引擎介绍:
使得JAVA应用程序可以通过一套固定的接口与各种脚本引擎交互,从而达到在JAVA平台上调用各种脚本语言的目的
Java脚本API是连通Java平台和脚本语言的桥梁
可以把一些复杂异变的业务逻辑交给脚本语言处理,这又大大提高了开发效率。


获得脚本引擎对象:

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


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

  1. 获取脚本程序输入,通过脚本引擎运行脚本并返回运行结果,这是最核心的接口
  2. 注意:接口。Java可以使用各种不同的实现,从而通用的调用js,groovy,python等脚本
  3. js使用了:Rhino
Rhino是一种使用Java语言编写的javascript的开源实现,原先有Mozilla开发,现在被集成进入jdk6.0
  官方首页:https://developer.mozilla.org/en-US/docs/Mozilla/Projects/Rhino

应用:
通过脚本引擎的运行上下文脚本和Java平台间交换数据
通过Java应用程序调用脚本函数。

代码:

public class TestRhiho {

	public static void main(String[] args) throws ScriptException, NoSuchMethodException, IOException {
		//获得脚本引擎对象
		ScriptEngineManager sem = new ScriptEngineManager();
		ScriptEngine engine = sem.getEngineByName("javascript");
		
		//定义变量,存储到引擎上下文中:即可以被Java使用,也可以被javascript使用
		engine.put("msg", "world is very big");
		String str ="var user = { name:'zhangsan',age:10,school:['清华','北大']};";
		str += "println(user.school)";//注意不能定义为alert();
		
		//执行脚本
		engine.eval(str);
		engine.put("msg", "you are pretty girl");
		System.out.println(engine.get("msg"));
		
		//定义函数
		engine.eval("function add(a,b){return a+b;}");
		//执行js函数
		//取得调用接口
		Invocable jsinvoke = (Invocable)engine;
		//调用方法
		Object result = jsinvoke.invokeFunction("add",new Object[]{1,2});
		System.out.println(result);

		//导入其他Java包,使用Java类
		String jscode = "importPackage(java.util); var list = Arrays.asList([\"张三\",\"李四\"])";
		engine.eval(jscode);		
		List<String> list = (List<String>)engine.get("list");
		for(String temp:list){
			System.out.println(temp);
		}
		
		//执行一个js文件
		URL url = TestRhiho.class.getClassLoader().getResource("a.js");
		FileReader fr = new FileReader(url.getPath());
		engine.eval(fr);		
		//Invocable js = (Invocable)engine;
		//js.invokeFunction("test", null);
		fr.close();
	}

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值