为用到时,使用方便直接保存一下代码
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 }