ScriptEngineManager类的用法
在Java中,我们可以使用ScriptEngine接口将脚本语言嵌入到Java程序中。而ScriptEngineManager则是一个管理器类,它提供了一种方便的机制来查找和创建ScriptEngine实例。
创建ScriptEngineManager对象
要使用ScriptEnginManger类,首先需要创建一个它的实例:
ScriptEngineManager manager = new ScriptEngineManager();
这个构造函数会初始化该对象,并且加载默认情况下可用的脚本引擎。
获取可用脚本引擎列表
通过以下代码可以获取当前环境下所有可用的script engine列表:
List<ScriptEngineFactory> factories = manager.getEngineFactories();
for (int i = 0; i < factories.size(); i++) {
System.out.println(factories.get(i).getLanguageName() + " "
+ factories.get(i).getLanguageVersion());
}
上述代码遍历了所有已安装并注册到系统中的脚本引擎工厂,输出每个工厂支持语言和版本信息。
获取指定名称或扩展名对应的脚本引擎
有时候我们需要特别指定某种类型或者名称对应的script engine, 可以通过以下方式获取:
// 根据扩展名获取engine:
String extension = "js";
ScriptEngine engine1 = manager.getEngineByExtension(extension);
// 根据名称获取engine:
String name = "javascript";
ScriptEngine engine2=manager.getEngineByName(name);
在上述代码中,我们可以通过扩展名或者名称获取脚本引擎。例如,getEngineByExtension()
方法将返回与指定扩展名关联的ScriptEngine实例。
执行脚本
一旦你拥有一个ScriptEngin对象, 就可以用它来执行任何支持的脚本语言了:
// 获取javascript engine:
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
// 执行javascript:
try {
String script = "var i=0;for(var j=0;j<10;j++)i++;";
engine.eval(script);
} catch (Exception e) {
System.out.println(e.getMessage());
}
在这个示例代码中,我们首先使用manager对象创建一个Javascript脚本引擎,并且执行了一个简单的js程序。
总结
由于Java SE 6已经内置了许多流行的动态语言解释器(如Rhino、JRuby和Jython等),所以使用Script Engine Manager类可以方便地嵌入各种不同类型的动态语言到Java应用程序中。当然,在实际开发过程中也需要注意安全性问题,并对可能出现的异常进行处理。