Java脚本引擎执行javascript代码

会使用脚本引擎执行js代码

什么是Java脚本引擎

Java脚本引擎是从JDK6.0就已经添加的功能。

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

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

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


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

JDK6.0时集成了Rhino来调用js,执行js代码,JDK8.0后改为了Nashorn。
使用脚本引擎执行js的一些基本操作如下:

package com.xyj.rhino;

import java.io.FileReader;
import java.net.URL;
import java.util.List;

import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

/**
 * 测试脚本引擎执行javascript代码
 */
@SuppressWarnings("all")
public class Demo01 {
	public static void main(String[] args) throws Exception {
		
		//获得脚本引擎对象
		ScriptEngineManager sem=new ScriptEngineManager();
		ScriptEngine engine = sem.getEngineByName("javascript");
		
		//定义变量,存储到引擎上下文中
		engine.put("msg","I like you,but just like you.");
		String str="var user= {name:'王儒',age:19,hobbies:['吃饭','睡觉']};";
		str+="print(user.name);";
		
		//执行脚本
		engine.eval(str);
		engine.eval("msg='I will be strong enough to make you feel bad.';");
		
		System.out.println(engine.get("msg"));//脚本引擎是介于脚本语言与Java语言之间,所以Java和Js都可以来获取
		
		System.out.println("# # # # # # # # # # # # # # # # # # # # # # # #");
		
		//定义函数
		engine.eval("function add(a,b){return a+b;};");
		//取得 调用接口
		Invocable jsInvoke=(Invocable)engine;
		//执行js函数
		Object result = jsInvoke.invokeFunction("add",100,300);
		System.out.println(result);
		
		//导入其他的Java包,使用其他包中的Java类
		String jsCode="var list=java.util.Arrays.asList([\"山西\",\"陕西\",\"山东\"]);";
		engine.eval(jsCode);
		
		List<String> list = (List<String>)engine.get("list");
		for (String item : list) {
			System.out.println(item);
		}
		
		//执行一个js文件
		URL url = Demo01.class.getClassLoader().getResource("test.js");//默认会在bin目录下面找
		FileReader fr=new FileReader(url.getPath());
		engine.eval(fr);
		fr.close();
		
	}
}

在src下有test.js文件如下:

//定义test方法
function test(){
	var a=3;
	var b=4;
	print("this is a js file. "+(a+b));
}

//执行test方法
test()

执行结果如下:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值