java 脚本引擎执行js

为用到时,使用方便直接保存一下代码

 

 1 package com.xzlf.reflectTest;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.FileInputStream;
 5 import java.io.InputStreamReader;
 6 import java.io.Reader;
 7 import java.util.List;
 8 
 9 import javax.script.Invocable;
10 import javax.script.ScriptEngine;
11 import javax.script.ScriptEngineManager;
12 
13 /**
14  * java 中的脚本引擎
15  * @author xzlf
16  *
17  */
18 public class Demo05 {
19     public static void main(String[] args) throws Exception {
20         // 获取脚本引擎对象
21         ScriptEngineManager manager = new ScriptEngineManager();
22         ScriptEngine engine = manager.getEngineByName("javascript");
23         // 定义变量
24         engine.put("msg", "Hello World!");
25         String str = "var user = {name:'张三', age:18};";
26         str += "print(user.name);";
27         // 执行脚本
28         engine.eval(str);
29         engine.eval("msg='Hello Java'");
30         System.out.println(engine.get("msg"));
31         
32         // 定义函数
33         engine.eval("function add(a, b){ return a +b;}");
34         // 取得调用接口
35         Invocable jsInvocable = (Invocable) engine;
36         // 执行脚本中定义的方法 
37         Object result = jsInvocable.invokeFunction("add", 11, 12);
38         System.out.println(result);
39         
40         // 导入java包,使用其他包中的java类
41         String jsCode = "var list = java.util.Arrays.asList([\"Java\", \"Html\", \"MySQL\"])";
42         engine.eval(jsCode);
43         List<String> list = (List<String>) engine.get("list");
44         for (String string : list) {
45             System.out.println(string);
46         }
47         
48         // 执行js 文件(js文件放在src下)
49         Reader reader = new BufferedReader(
50                 new InputStreamReader(new FileInputStream("src/test.js")));
51         engine.eval(reader);
52         reader.close();
53     }
54 }

 

posted @ 2020-04-12 01:41  行者老夫  阅读(1627)  评论(0编辑  收藏  举报