JDK8中Java调用Javascript脚本引擎动态定义与执行代码

[java]  view plain  copy
  1. import java.lang.*;  
  2. import java.util.Arrays;  
  3. import java.util.List;  
  4.   
  5. import javax.script.Invocable;  
  6. import javax.script.ScriptEngine;  
  7. import javax.script.ScriptEngineManager;  
  8.   
  9. public class ScriptEngineTest {  
  10.   
  11. public static void main(String[] args) throws Exception {  
  12.     ScriptEngineManager sem = new ScriptEngineManager();  
  13.     ScriptEngine engine = sem.getEngineByName("javascript");     //python or jython,   
  14.   
  15. <pre name="code" class="html">   //向上下文中存入变量  
  16.    engine.put("msg""just a test");  
  17.    //定义类user  
  18.    String str = "msg += '!!!';var user = {name:'tom',age:23,hobbies:['football','basketball']}; ";  
  19.    engine.eval(str);  
  20.   
  21.    //从上下文引擎中取值  
  22.    String msg = (String) engine.get("msg");  
  23.    String name = (String) engine.get("name");  
  24.    String[] hb = engine.get("hb");  
  25.    System.out.println(msg);  
  26.    System.out.println(name + ":" + hb[0]);  
  27.   
  28.    //定义数学函数  
  29.    engine.eval("function add (a, b) {c = a + b; return c; }");  
  30.   
  31.     //取得调用接口  
  32.     Invocable jsInvoke = (Invocable) engine;  
  33.   
  34.   //定义加法函数  
  35.   
  36.   Object result1 = jsInvoke.invokeFunction("add"new Object[] { 105 });  
  37.   
  38.   System.out.println(result1);  
  39.   
  40.   //调用加法函数,注意参数传递的方法  
  41.   
  42.   Adder adder = jsInvoke.getInterface(Adder.class);  
  43.   
  44.   int result2 = adder.add(1035);  
  45.   
  46.   System.out.println(result2);  
  47.   
  48.   //定义run()函数  
  49.   
  50.   engine.eval("function run() {print('www.java2s.com');}");  
  51.   
  52.   Invocable invokeEngine = (Invocable) engine;  
  53.   
  54.   Runnable runner = invokeEngine.getInterface(Runnable.class);  
  55.   //定义线程运行之  
  56.   
  57.   Thread t = new Thread(runner);  
  58.   
  59.   t.start();  
  60.   
  61.   t.join();  
  62.   
  63.   //导入其他java包  
  64.   
  65.   String jsCode = "importPackage(java.util);  
  66.   
  67.   var list2 = Arrays.asList(['A''B''C']); ";  
  68.   
  69.   engine.eval(jsCode);  
  70.   
  71.   List<String> list2 = (List<String>) engine.get("list2");  
  72.   
  73.   for (String val : list2) { System.out.println(val);}  
  74.   
  75.   }  
  76.   
  77. }  


 
 

 脚本引擎为实现动态功能(如插件机制)提供了良好的扩展性.

有关引擎接口的文档:

ScriptEngine


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值