第四篇 通过脚本引擎去执行JavaScript代码

  脚本引擎执行JavaScript代码

脚本引擎介绍:

是的java应用程序可以通过一套固定的接口与各种脚本引擎交互,从而达到在java平台上面调用各种脚本语言的目的。

java脚本api是连通java平台和脚本语言的桥梁。

可以把一些复杂易变的业务逻辑交给脚本语言处理,这就大大提高了开发效率。

 

获得脚本引擎对象:

//获取脚本引擎对象

ScriptEngineManager sem = new ScriptEngineManager ();

ScriptEngine engine = sem .getEngineByName("javaScript");

java脚本api为开发者提供了如下功能:

获取脚本程序的输入,通过脚本引擎运行脚本并返回运行结果,这是最核心的接口。

注意点:接口。java可以通过使用各种不同的实现,从而调用js、groovy、python等脚本。

js使用了Rhino,这是一种使用java语言编写的JavaScript的开源实现。

通过脚本引擎运行上下文,在脚本和java平台间交换数据。

通过java应用程序调用脚本函数。

 

 1 /**
 2  * 测试脚本引擎执行JavaScript代码
 3  *
 4  * @author Zhang XiaoDao
 5  *
 6  */
 7 
 8 public class Demo01 {
 9     //获取脚本引擎对象
10     ScriptEngineManager sem = new ScriptEngineManager();
11     ScriptEngine en = sem.getEngineByName("javascript");
12     
13     
14     //定义变量,存储到引擎上下文中,java和js都能获取到
15     en.put("msg","hello world");
16     String str = "var user = {name:'zhangsan',age:18};";
17     str += "println(user.name);";
18     
19     //执行脚本
20     en.eval(str);
21     
22     //修改脚本里面的值
23     en.eval("msg = 'hi world';");
24     System.out.println(en.get("msg"));
25     
26     System.out.println("==============================");
27     //定义函数
28     en.eval("function add(a,b){var sum = a+b; return sum;}");
29     //执行js函数   取得调用接口
30     Invocable jsInvocable = (Invocable) en;
31     //传递方法名和参数
32     Object resualt = jsInvocable.invokeFunction("add",new Object[]{10,20});
33     System.out.println(resualt);
34     
35     //导入其他的java包,使用其他包中的java类
36     String jsCode = "importPackage(java.util); var list = Arrays.asList([\"张三\",\"李四\",\"王五\"])";
37     en.eval(jsCode);
38     //获取js中的list
39     List<String> list1 = (List<String>)en.get("list");
40     for(String ls : list1){
41         System.out.println(ls);
42     }
43     
44     //执行一个js文件(我们将a.js放在项目的src下面即可,或者是其他的地方)
45     URL url = Demo01.class.getClassLoader().getResource("a.js");
46     FileReader fr = new FileReader(url.getPath());
47     en.eval(fr);
48     fr.close();
49 }

 

编写一个js文件

 

1 //定义test方法
2 function test(){
3     var a = 1;
4     var b = 2;
5     println("执行js文件:"+(a+b));
6 }
7 
8 //执行test方法
9 test();

 

posted on 2018-06-02 16:50  奋斗的小刀001  阅读(203)  评论(0编辑  收藏  举报

导航