学习Java6(二) 脚本引擎

 1  import  javax.script.ScriptEngine;
 2  import  javax.script.ScriptEngineManager;
 3  import  javax.script.ScriptException;
 4 
 5  public   class  JavaScriptEngineTest {
 6       public   static   void  main(String[] args) {
 7           try  {
 8              JavaScriptEngineTest test  =   new  JavaScriptEngineTest();
 9              test.sayHello( " hermit " );
10          }  catch  (Exception se) {
11              se.printStackTrace();
12          }
13      }
14 
15 
16 
17       public   void  sayHello(String name) {
18          ScriptEngineManager sem  =   new  ScriptEngineManager();
19          ScriptEngine jsEngine  =  sem.getEngineByName( " js " );
20           try  {
21              jsEngine.eval( " print('hello  "   +  name  +   " ') " );
22          }  catch  (ScriptException e) {
23              e.printStackTrace();
24          }
25      }
26 
27      
28  }

输出:
hello hermit

 1  import  javax.script.ScriptEngine;
 2  import  javax.script.ScriptEngineManager;
 3  import  javax.script.ScriptException;
 4 
 5  public   class  JavaScriptEngineTest {
 6       public   static   void  main(String[] args) {
 7           try  {
 8              JavaScriptEngineTest test  =   new  JavaScriptEngineTest();
 9              test.testObject( " a " 7 );
10          }  catch  (Exception se) {
11              se.printStackTrace();
12          }
13      }
14 
15       public   void  testObject(String key,  int  value) {
16          ScriptEngineManager manager  =   new  ScriptEngineManager();
17          ScriptEngine engine  =  manager.getEngineByName( " js " );
18          engine.put(key, value);
19           try  {
20              engine.eval( " print( "   +  key  +   " +1) " );
21          }  catch  (ScriptException e) {
22              e.printStackTrace();
23          }
24      }
25  }

输出:

调用js:
 1  import  java.io.FileNotFoundException;
 2  import  java.io.FileReader;
 3  import  javax.script.Invocable;
 4  import  javax.script.ScriptEngine;
 5  import  javax.script.ScriptEngineManager;
 6  import  javax.script.ScriptException;
 7 
 8  public   class  JavaScriptEngineTest {
 9       public   static   void  main(String[] args) {
10           try  {
11              JavaScriptEngineTest test  =   new  JavaScriptEngineTest();
12              test.testAdd( 5 6 );
13          }  catch  (Exception se) {
14              se.printStackTrace();
15          }
16      }
17 
18       public  String getPath() {
19           return   this .getClass().getResource( " / " ).getPath();
20      }
21 
22 
23       public   void  testAdd( int  a,  int  b) {
24          ScriptEngineManager sem  =   new  ScriptEngineManager();
25          ScriptEngine jsEngine  =  sem.getEngineByName( " js " );
26           try  {
27              jsEngine.eval( new  FileReader(getPath()  +   " JavaScriptEngineTest.js " ));
28          }  catch  (FileNotFoundException e) {
29              e.printStackTrace();
30          }  catch  (ScriptException e) {
31              e.printStackTrace();
32          }
33          Invocable invocableEngine  =  (Invocable) jsEngine;
34           try  {
35              Object ret  =  invocableEngine.invokeFunction( " add " , a, b);
36              System.out.println(ret);
37          }  catch  (ScriptException e) {
38              e.printStackTrace();
39          }  catch  (NoSuchMethodException e) {
40              e.printStackTrace();
41          }
42      }
43 
44      
45  }

JavaScriptEngineTest.js,放在同一目录:
1  function  add(a,b) {
2     return  a + b;
3  }
输出:
11.0
    看了以上三个例子,我和大家一样有个疑问:what use?
    一番思考,个人认为,脚本引擎对一般应用和开发没用什么太大用处,没人会用java能实现的功能非要绕个弯子去用js去实现。
    那么是不是脚本引擎没用呢?也不是,我认为脚本引擎的作用在于开发产品。。。。。。。。
比如写个浏览器。。。。。。。。。。
比如写个报表工具。。。。。。。。
比如一个产品提供一些二次开发的接口给高级用户。
都可以用到脚本引擎。甚至可以扩展定义自己的脚本,不局限于JS。

这是我想到的脚本引擎的唯一用处。。。。。。
欢迎大家一起讨论。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值