Java 脚本引擎
脚本引擎,就是一个编程语言的解释器,它的功能是解释执行用户的程序文本,将它译成计算机能执行的机器代码,完成一系列的功能。
Java脚本引擎简单地说就是指Java提供的一组兼容操作各种脚本语言的的API。
下面将我所了解得内容做以简单的记录,初来乍到,大神请轻喷,感谢!
首先来个demo感受下:通过 ScriptEngineManager 对象,通过 getEngineByExtension("js")(通过扩展名,获取脚本对象);
public class Engine { public static void main(String[] args) throws ScriptException { ScriptEngine engine = new ScriptEngineManager().getEngineByExtension("js"); if(engine==null){ throw new RuntimeException("找到不JavaScript语言执行引擎"); } engine.eval("var a; a = 10;print('这是JavaScript脚本引擎:'+a);"); } }
// 直接执行脚本 engine.eval("print('我他么的热死了!')"); System.out.println("---// 脚本语言绑定-----"); // 脚本语言绑定 engine.put("name", "World"); engine.eval("var message = 'hello,'+name;"); engine.eval("print(message)"); Object obj = engine.get("message"); System.out.println(obj); System.out.println(engine.get("name")); SimpleBindings bindings = new SimpleBindings(); bindings.put("hobby","写代码"); engine.eval("print('I like '+ hobby);",bindings); //重定向 ScriptContext context = engine.getContext(); context.setWriter(new FileWriter("aaa.txt")); engine.eval("print('ni hao ya wo s ni da ge dy ')"); //自定义属性 context.setAttribute("name", "王宝宝", ScriptContext.GLOBAL_SCOPE); context.setAttribute("name", "xiao bao bao", ScriptContext.ENGINE_SCOPE); System.out.println( context.getAttribute("name")); Bindings binding = engine.createBindings(); binding.put("key","11111"); Bindings binding1 = engine.createBindings(); binding1.put("key","222"); context.setBindings(binding1, ScriptContext.GLOBAL_SCOPE); engine.eval("print(key);");
注意:1.使用eval ()函数即可在Java代码中使用JavaScript 或其他脚本语言。
2.Oracle Nashorn 为jdk1.8引擎版本名称。
3.在jdk1.8环境下输出语句请使用:print();请勿使用println();否则报 javax.script.ScriptException异常!
//代码执行效果 Oracle Nashorn 我他么的热死了! ------脚本语言绑定----- hello,World hello,World World I like 写代码 xiao bao bao