0
点赞
收藏
分享

微信扫一扫

java与脚本引擎


  1. 获得脚本引擎对象

//获得脚本引擎对象
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine engine = sem.getEngineByName("javascript");

  1. javascript脚本引擎——Rhino
    网站:https://developer.mozilla.org/en-US/docs/Mozilla/Projects/Rhino

例子

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

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

public class Test {

public static void main(String[] args) {
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine engine = sem.getEngineByName("javascript");

engine.put("msg", "但使龙城飞将在,不教胡马度阴山");
String str = "var man= {name:'汉将军李广',age:18,skills:['飞刀','骑射']};";
str += "print(man.name)";

try {
// 执行脚本
engine.eval(str);

// 操作属性
engine.eval("msg='飞将军是卫青';");
System.out.println(engine.get("msg"));

System.out.println("----------------------");

// 执行函数
engine.eval("function add(a,b){var sum=a+b;return sum;}");
Invocable jsInvoke = (Invocable) engine;
Object ret = jsInvoke.invokeFunction("add", new Object[] { 10, 20 });
System.out.println(ret);

System.out.println("----------------------");

// 导入java包,使用包中的类
String jsCode = "var list = java.util.Arrays.asList([\"北京\",\"南京\",\"西安\"]);";
engine.eval(jsCode);
List<String> list2 = (List<String>) engine.get("list");
for (String ls : list2) {
System.out.println(ls);
}

System.out.println("----------------------");

// 执行js脚本文件
URL url = Test.class.getClassLoader().getResource("test.js"); // 项目src目录下——即 System.getProperty("java.class.path")
FileReader fr = new FileReader(url.getPath());
engine.eval(fr);
fr.close();

} catch (ScriptException | NoSuchMethodException | IOException e) {
e.printStackTrace();
}
}

}


举报

相关推荐

0 条评论