package com.aflfte.test;
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代码
*
* @author root
*
*/
public class Demo01 {
public static void main(String[] args) throws Exception {
//获得脚本引擎对象
ScriptEngineManager sem=new ScriptEngineManager();
ScriptEngine engine=sem.getEngineByName("javascript");
//定义变量后会存储到脚本引擎的上下文中
engine.put("msg", "hello world!!");
String str="var user= {name:'张三',age:18,schools:['北大','清华']};";
str+="print(user.name);";
//执行脚本
engine.eval(str);
engine.eval("msg='hello world!!';");
System.out.println(engine.get("msg "));
//定义函数
engine.eval("function add(a,b){var sum=a+b; return sum;}");
//执行js函数
//1.取得调用接口
Invocable jsinv=(Invocable)engine;
//2.执行脚本中定义的方法
Object re=jsinv.invokeFunction("add", new Object[] {13,20});
System.out.println(re);
/*
//导入其它的java包使用其它包中的java类
String jscode="importPackage(java.util); var list=Arrays.asList([\"北京大学\",\"清华大学\",\"南开大学\"]);";
engine.eval(jscode);
List<String> list2=(List<String>)engine.get("list");
for(String temp:list2) {
System.out.println(temp);
}
*/
//执行一个js文件
URL url=Demo01.class.getClassLoader().getResource("a.js");
FileReader fr=new FileReader(url.getPath());
engine.eval(fr);
fr.close();
}
}
« 使用javassist动态生成一个新的类
|
动态编译»
|