java scripting api有许多类和接口。它们在javax.script包中。
scriptengine
接口是其实例执行以脚本语言编写的脚本的接口
scriptenginefactory执行两个任务:
abstractscriptengine类是一个抽象类,并为scriptengine接口提供了部分实现。
scriptenginemanager类发现和实例化脚本引擎。
以下代码显示如何列出所有可用的脚本引擎。
import java.util.list; import javax.script.scriptenginefactory; import javax.script.scriptenginemanager; public class main { public static void main(string[] args) { scriptenginemanager manager = new scriptenginemanager(); // get the list of all available engines list<scriptenginefactory> list = manager.getenginefactories(); // print the details of each engine for (scriptenginefactory f : list) { system.out.println("engine name:" + f.getenginename()); system.out.println("engine version:" + f.getengineversion()); system.out.println("language name:" + f.getlanguagename()); system.out.println("language version:" + f.getlanguageversion()); system.out.println("engine short names:" + f.getnames()); system.out.println("mime types:" + f.getmimetypes()); system.out.println("==="); } } }
上面的代码生成以下结果。
以下代码显示了如何使用javascript,groovy,jython和jruby在标准输出上打印消息。
如果脚本引擎不可用,程序会向用户提示错误消息。
import javax.script.scriptengine; import javax.script.scriptenginemanager; import javax.script.scriptexception; public class main { public static void main(string[] args) { // get the script engine manager scriptenginemanager manager = new scriptenginemanager(); // try executing scripts in nashorn, groovy, jython, and jruby execute(manager, "javascript", "print("hello javascript")"); execute(manager, "groovy", "println("hello groovy")"); execute(manager, "jython", "print "hello jython""); execute(manager, "jruby", "puts("hello jruby")"); } public static void execute(scriptenginemanager manager, string enginename, string script) { scriptengine engine = manager.getenginebyname(enginename); if (engine == null) { system.out.println(enginename + " is not available."); return; } try { engine.eval(script); } catch (scriptexception e) { e.printstacktrace(); } } }
上面的代码生成以下结果。
要获得用于在标准输出上打印消息的语法,请使用scriptenginefactory类中的方法getoutputstatement(string todisplay)。
以下代码段显示了如何获取nashorn的语法。
import javax.script.scriptengine; import javax.script.scriptenginefactory; import javax.script.scriptenginemanager; import javax.script.scriptexception; public class main { public static void main(string[] args) { // get the script engine factory for nashorn scriptenginemanager manager = new scriptenginemanager(); scriptengine engine = manager.getenginebyname("javascript"); scriptenginefactory factory = engine.getfactory(); // get the script string script = factory.getoutputstatement("\"w3cschool\""); system.out.println("syntax: " + script); // evaluate the script try { engine.eval(script); } catch (scriptexception e) { // todo auto-generated catch block e.printstacktrace(); } } }
上面的代码生成以下结果。