java

    技术2022-07-10  104

    package java_215_脚本引擎执行javascript代码_Rhino引擎_练习;

    import java.io.FileReader; import java.net.URL; import java.util.List; import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; /**

    脚本引擎执行javascript代码:1.脚本引擎介绍: 1)使得java应用程序可以通过一套固定的接口与各种脚本引擎交互,从而达到java平台上调用各种脚本语言的目的 2)java脚本API是连通java平台与脚本语言的桥梁 3)可以把一些复杂异变的业务逻辑交给脚本语言处理,大大提高开发效率 2.获取脚本引擎对象3.java脚本API为开发者提供了如下功能: 1)获取脚本程序输入通过脚本引擎运行脚本并返回运行结果,这是最核心的接口 注意是:接口. java可以使用各种不同的实现,从而通用的调用js,groovy,Python等脚本 js使用了:Rhino Rhino是一种使用java语言编写的javaScript的开源实现,原先由Mozilla开发,现在被集成进入JDK 2)通过脚本引擎的运行上下文在脚本和java平台间交换数据 3)通过java应用程序调用脚本函数

    */ public class Demo01 { public static void main(String[] args) throws Exception { //获得脚本引擎对象 ScriptEngineManager sem = new ScriptEngineManager();//ScriptEng ineManager脚本引擎管理器 //getEngineByName按名称获取引擎;传入javascript(脚本语言名字)或者传入js(缩写) ScriptEngine engine = sem.getEngineByName(“javascript”);//ScriptEngine脚本引擎;

    //写入代码;定义变量 ,键值段;这个存储到引擎上下文中 ,js和java都可以读取到 engine.put("msg", "wangwei is a good man!");//msg是自己定义的一个变量 //也可以通过js定义一个代码 String str = "var user = {name:'wangwei ',age:20,schools:['北京大学','南京大学']};"; //打印 str +="print(user.name);";//只能通过控制台打印 //执行这个js脚本 engine.eval(str);//传入字符串;抛出异常 //在脚本中修改 定义的变量 engine.eval("msg = '北京大学 is a good school';"); //在java中获取 System.out.println(engine.get("msg")); System.out.println("=================="); //定义函数 engine.eval("function add(a,b){var sum = a+b;return sum;}"); //执行js函数;Invocable可调用接口 ; Invocable jsInvoke = (Invocable) engine; //执行脚本中定义的方法;传进参数 Object result = jsInvoke.invokeFunction("add", new Object[]{20,25}); //获取值 System.out.println(result); //导入其他的java包,使用其他包中的java类;把一个数组转化为list //String jsCode = "importPackage(java.util);var list = Arrays.asList([\" 北京大学\",\"清华大学\",\"南京大学\"])"; //注意jdk1.6的使用方法规则 ,到1.8已经不适用了;改成如下方法 ;否则会报错 String jsCode = "var list = java.util.Arrays.asList([\"北京大学\",\"清华大学\",\"南京大学\"])"; //执行 engine.eval(jsCode); //通过调用Arrays.asList方法把数据转换为js变量; 然后转换为java变量 //获取 List<String> list2 = (List<String>) engine.get("list");//转化为java的List对象;因为是Object需转型;并且为了方便加了泛型 //遍历 for(String temp : list2){ System.out.println(temp); } //执行一个js文件(注意:将a.javascript至于项目的src下即可) //获取;getClassLoader得到类的加载器;getResource获取资源 URL url = Demo01.class.getClassLoader().getResource("a.javascript");//它会在默认的类下找a.javascript;返回一个URL,导入包import java.net.URL; //需要一个FileReader文件阅读器 FileReader fr = new FileReader(url.getPath());//获取绝对路径 engine.eval(fr); fr.close();//用于测试 ;实际应用要使用try catch finally //注意 :工程不能用中文名字 否则报错 }

    } //------------------------------------------------ /如果在电脑某一个地方或网络某一个地方有一个js(javascript)文件;如何执行这个文件 //定义test方法 function test(){ var a = 5; var b = 6; //执行这个文件 print(“invoke js file:”+(a+b));//注意 :不能写println

    } //执行这个方法 test();

    //结果-------------------------------------------

    Processed: 0.017, SQL: 9