执行JavaScript用到的类有:
javax.script.ScriptEngine;
javax.script.ScriptEngineFactory;
javax.script.ScriptEngineManager;
javax.script.ScriptException;
- 需求1:执行一个JavaScript字符串,将结果打印在控制台上
ScriptEngineManager m = new ScriptEngineManager();
//获取JavaScript执行引擎
ScriptEngine engine = m.getEngineByName("JavaScript");
//执行JavaScript代码
engine.eval("function getAdd(a,b){return a+b;} print('我爱你中国!' + getAdd(1,2));");
执行结果为:
- 需求2:执行一个js脚本文件,并将结果读入到变量中。
步骤一:确定js文件及路径
先定义一个js文件,名为:abc.js,放在resource或者src目录下面。
function getAdd(a, b) {
return a * b;
}
print("1*2 = " + getAdd(1, 2) + "\n");
步骤二:直接上Java测试代码:
//使用管道流,将输出流转为输入流
PipedReader prd = new PipedReader();
PipedWriter pwt = new PipedWriter(prd);
//设置执行结果内容的输出流
engine.getContext().setWriter(pwt);
//js文件的路径
String strFile = Thread.currentThread().getClass().getResource("/").getPath() + "/abc.js";
Reader reader = new FileReader(new File(strFile));
engine.eval(reader);
BufferedReader br = new BufferedReader(prd);
//开始读执行结果数据
String str = null;
while ((str = br.readLine()) != null && str.length() > 0) {
System.out.println(str);
}
br.close();
pwt.close();
prd.close();
执行结果:
脚本引擎指的是脚本的运行环境,能够把运行其上的解释性语言如JavaScript转换为更底层的汇编语言,从而让脚本获得被执行的机会。
Java1.6引入了对Java Specification Request(JSR)223的支持,JSR223旨在定义一个统一的规范,使得Java应用程序可以通过一套固定的接口与各种脚本引擎交互,从而达到在Java平台上调用各种脚本语言的目的。这些接口被定义在javax.script包中,主要是一些接口和抽象类。