Java编程Nashorn实例代码
本文研究的主要是Java编程Nashorn的相关内容,具体如下。
Nashorn是什么
Nashorn,发音“nass-horn”,是德国二战时一个坦克的命名,同时也是java8新一代的javascript引擎--替代老旧,缓慢的Rhino,符合ECMAScript-2625.1版语言规范。你可能想javascript是运行在web浏览器,提供对html各种dom操作,但是Nashorn不支持浏览器DOM的对象。这个需要注意的一个点。
之前学习Java8的时候恰好写了个简单的例子,所以放在这里记录一下。
文件目录:
- StringFunction.java,字符串功能类
- StringNashorn.java,封装脚本引擎
- NashornTest.java,测试引擎,引擎调用
StringFunction.java源码:
publicclassStringFunction{ /** *字符串截取 */ publicStringsub(Stringstr,intstart,intend){ returnstr.substring(start,end); } /** *字符串拼接 */ publicStringappend(String...strs){ StringBuilderresult=newStringBuilder(strs[0]); Stream.of(strs).skip(1).forEach(str->result.append(str)); returnresult.toString(); } }
StringNashorn.java源码:
publicclassStringNashorn{ /** *Nashorn脚本引擎 */ privateScriptEnginenashorn=newScriptEngineManager().getEngineByName("nashorn"); /** *执行脚本 */ publicObjectexecute(Stringscript){ ScriptContextscriptContext=newSimpleScriptContext(); //定义一个名为stringfunction的函数,这个函数实际对应着一个StringFunction对象 scriptContext.setAttribute("stringfunction",newStringFunction(),100); nashorn.setContext(scriptContext); Objectresult=null; try{ result=nashorn.eval(script); }catch(ScriptExceptione){ e.printStackTrace(); } returnresult; } }
NashornTest.java源码:
publicclassNashornTest{ publicstaticvoidmain(String[]args){ Stringsubstring="stringfunction.sub(\"abcdefghijk\",1,4);"; Stringappend="stringfunction.append(\"abc\",\"def\");"; StringNashornnashorn=newStringNashorn(); ObjectsubResult=nashorn.execute(substring); ObjectappendResult=nashorn.execute(append); System.out.println(subResult.toString()); System.out.println(appendResult.toString()); } }
运行main方法,运行结果:
bcd
abcdef
这里如果NashornTest.java改写如下:
publicclassNashornTest{ publicstaticvoidmain(String[]args){ //脚本内用对象接收结果并打印 Stringsubstring="vars1=stringfunction.sub(\"abcdefghijk\",1,4);" +"print(s1);"; Stringappend="vars2=stringfunction.append(\"abc\",\"def\");" +"print(s2);"; StringNashornnashorn=newStringNashorn(); //这里execute不再返回对象,因为在脚本里面已经有对象接收sub和append的执行结果。 nashorn.execute(substring); nashorn.execute(append); } }
同样也会输出相同的结果。
总结
以上就是本文关于Java编程Nashorn实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!