脚本语言的支持
JSR223中规范了在Java虚拟机上运行的脚本语言与Java程序之间的交互方式。JSR233是JavaSE6的一部分,在Java表中API中的包是javax.script。目前Java虚拟机支持比较多的脚本语言,比较流行的有JavaScript、Scala、JRuby、Jython和Groovy等。
脚本包
Java 脚本功能是在 javax.script 包中。这是一个比较小的,简单的API。脚本的出发点是 ScriptEngineManager 类。一个 ScriptEngineManager 对象可以通过jar文件的服务发现机制发现脚本引擎。它也可以实例化脚本引擎来解释使用特定的脚本语言编写的脚本。使用脚本编程接口的最简单的方法如下:
1.创建一个 ScriptEngineManager 对象
2.从 ScriptEngineManager 获取 ScriptEngine 对象
3.使用 ScriptEngine的eval方法执行脚本
看几个例子
例1,”HELLO WORLD”
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
/**
* 第一个例子, 执行脚本输出"Hello,World"
* 通过 getEngineByName 方法得到一个JavaScript引擎实例。通过脚本引擎的eval方法来执行给定的JavaScript代码。
*/
public class EvalScript {
public static void main(String[] args) throws Exception {
// create a script engine manager
ScriptEngineManager factory = new ScriptEngineManager();
// create a JavaScript engine
ScriptEngine engine = factory.getEngineByName("JavaScript");
// evaluate JavaScript code from String
engine.eval("print('Hello, World')");
}
}
例2,执行脚本文件
/**
* 执行一个脚本文件
*
* 调用eval方法来接收java.io.Reader作为输入源, 读入的脚本被执行。
*/
public class EvalFile {
public static void main(String[] args) throws Exception {
// create a script engine manager
ScriptEngineManager factory = new ScriptEngineManager();
// create JavaScript engine
ScriptEngine engine = factory.getEngineByName("JavaScript");
// evaluate JavaScript code from given file - specified by first argument
engine.eval(new java.io.FileReader(args[0]));
}
}
例3,脚本变量
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import java.io.File;
/**
* 脚本变量
* 当你的java应用程序嵌入脚本引擎和脚本时,你可能希望将您的应用程序中的对象作为全局变量暴露于脚本中。
*/
public class ScriptVars {
public static void main(String[] args) throws Exception {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
File f = new File("test.txt");
// expose File object as variable to script
engine.put("file", f);
// evaluate a script string. The script accesses "file"
// variable and calls method on it
engine.eval("print(file.getAbsolutePath())");
}
}
参考:
Java语言的动态性支持(一)ScriptEngineManager
怎么通过java去调用并执行shell脚本以及问题总结
Java 脚本化编程指南