如java程序通过put方法传入一个js属性
标签:
脚本引擎打点工具java供给了一个脚本引擎打点工具,从这个工具可以获得各类脚本语言的脚本引擎,如js、python等。我们可以通过脚本引擎,来挪用已经写好的脚本文件。相当的便利。
我们可以使用:new ScriptEngineManager()获取一个脚本引擎打点工具东西。
然后,可以通过getEngineByName(scriptName)的方法得到我们想要的脚本引擎。
//获取脚本引擎打点器 ScriptEngineManager sem = new ScriptEngineManager(); //获取js脚本引擎 ScriptEngine engine = sem.getEngineByName("js");
JS脚本引擎
js脚本引擎可以存储由java措施传入的js数据。如java措施通过put要领传入一个js属性,我们就可以用get要领得到这个属性。同时js脚本引擎也可以直接执行java措施传入的js代码。更为常用的是,js脚本引擎可以以Reader流的方法读取一个js文件,,并运行它。下面我们来看看它的常见用法。
put要领put(key,value)要领可以向js脚本引擎中添加js属性。
engine.put("name", "lily");
get要领
Object get(key)要领可以读取存储在引擎中的js属性。
System.out.println(engine.get("name")); //运行功效 lily
eval要领
eval添加进的无论是String类型的js代码还是以Reader传入js文件,城市执行并存储在js脚本引擎中。
eval(String script)以java字符串的方法传入js脚本引擎中并执行。
String aFunction = "function ff(){print(‘what hell?due?‘);}ff();"; engine.eval(aFunction); //运行功效 what hell?due?
eval(Reader)
以Reader流的方法传入一个js文件到js脚本引擎并执行
//直接执行现有的js文件 //将加载得到的URL东西获取字符输入流 FileReader fr = new FileReader("c:/newFolder/a.js"); //通过engine.eval(Reader)执行js文件 engine.eval(fr); //封锁流 fr.close();
将js引擎作为一个java接口使用
我们可以将脚本引擎转为一个java的接口来挪用生存在此中的js函数。
注意:当向js函数中通报传输时,通报的是Object东西。它是多值传参,可以使用Object数组的方法进行多值传参(将参数写在一个Object数组中,在单独传入这个数组),也可以直接通报多个Object东西。
//将引擎作为借口挪用引擎中存储的js代码中的函数 //先添加一个函数 engine.eval("function returnWhatYouInput(a){return a;}"); //将engine转为Invocable的引用 Invocable jsInvoke = (Invocable)engine; Object result = jsInvoke.invokeFunction("returnWhatYouInput", new Object[]{"sick"});//多值传参Object类型,如只传一个可以这样写,也可以传已经创建好的Object引用 System.out.println(result);
js引擎中引入Java工具的要领
//js脚本中引入java包的要领 engine.eval("var list = java.util.Arrays.asList(\"你\",\"我\")");//就是这一行,示例为传入java.util.Arrays工具 List<String> list = (List<String>) engine.get("list"); for(String s : list){ System.out.println(s); }
完整代码
package _20200105_ScriptEngine; import java.io.FileReader; import java.util.List; import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; public class Demo02 { public static void main(String[] args) throws Exception{ //获取脚本引擎打点器 ScriptEngineManager sem = new ScriptEngineManager(); //获取js脚本引擎 ScriptEngine engine = sem.getEngineByName("js"); //向引擎中添加js代码 engine.put("name", "lily"); //直接执行java字符串类型的js代码 String aFunction = "function ff(){print(‘what hell?due?‘);}ff();"; engine.eval(aFunction); //读取引擎中存储的js代码中的属性 System.out.println(engine.get("name")); //将引擎作为借口挪用引擎中存储的js代码中的函数 //先写一个函数 engine.eval("function returnWhatYouInput(a){return a;}"); //将engine转为Invocable的引用 Invocable jsInvoke = (Invocable)engine; Object result = jsInvoke.invokeFunction("returnWhatYouInput", new Object[]{"sick"});//多值传参Object类型,如只传一个可以这样写,也可以传已经创建好的Object引用 System.out.println(result); //js脚本中引入java包的要领 engine.eval("var list = java.util.Arrays.asList(\"你\",\"我\")"); List<String> list = (List<String>) engine.get("list"); for(String s : list){ System.out.println(s); } //直接执行现有的js文件 //将加载得到的URL东西获取字符输入流 FileReader fr = new FileReader("c:/newFolder/a.js"); //通过engine.eval(Reader)执行js文件 engine.eval(fr); //封锁流 fr.close(); } }
运行功效
此中1120是js文件中的一个属性。
what hell?due? lily sick 你 我 invoke js file:7 1120
80 脚本引擎——js脚本引擎
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/32219.html
- 上一篇:注意流量既可以走正向流量
- 下一篇:则遵循就近原则