精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

在Java中使用腳本語言 javax.script探秘

開發 后端
Java 6對腳本語言的支持來自JSR223規范,對應的包是javax.script。今天我們就一起來看看Java混合編程的一個嘗試,在Java中使用腳本語言進行編程。

之前我們提到Java,總說其最大的特點是跨平臺,是一次編寫到處運行。但最近幾年,Java領域最大的變化就是基于JVM的語言正在開始流行,Java已經進入了混合編程時代。今天我們要向您介紹的就是Java在多語言方面的一個嘗試,在Java中使用腳本語言。(關于Java多語言編程請參考51CTO的專題:《Java程序員的未來 走向混合編程時代》)。

1、可用的腳本引擎

Java 6提供對執行腳本語言的支持,這個支持來自于JSR223規范,對應的包是javax.script。默認情況下,Java 6只支持JavaScript腳本,它底層的實現是Mozilla Rhino,它是個純Java的JavaScript實現。可以通過下面的代碼列出當前環境中支持的腳本引擎:

  1. ScriptEngineManager manager = new ScriptEngineManager();  
  2.         ListScriptEngineFactory> factories = manager.getEngineFactories();  
  3.         for (ScriptEngineFactory f : factories) {  
  4.             System.out.println(  
  5.                     "egine name:"+f.getEngineName()+  
  6.                     ",engine version:"+f.getEngineVersion()+  
  7.                     ",language name:"+f.getLanguageName()+  
  8.                     ",language version:"+f.getLanguageVersion()+  
  9.                     ",names:"+f.getNames()+  
  10.                     ",mime:"+f.getMimeTypes()+  
  11.                     ",extension:"+f.getExtensions());  
  12.         } 

輸出結果:egine name:Mozilla Rhino,engine version:1.6 release 2,language name:ECMAScript,language version:1.6,names:[js, rhino, JavaScript, javascript, ECMAScript, ecmascript],mime:[application/javascript, application/ecmascript, text/javascript, text/ecmascript],extension:[js]。

可以看到,Java內置只支持JavaScript一種腳本。但是,只要遵循 JSR223,便可以擴展支持多種腳本語言,可以從https://scripting.dev.java.net/上查找當前已被支持的腳本的第三方庫。

2、hello script

接下來給出在Java中使用JavaScript的Hello world示例:

  1. ScriptEngineManager manager = new ScriptEngineManager ();  
  2.         ScriptEngine engine = manager.getEngineByName ("js");  
  3.         String script = "print ('hello script')";  
  4.         try {  
  5.             engine.eval (script);  
  6.         } catch (ScriptException e) {  
  7.             e.printStackTrace();  
  8.         } 

使用的API還是很簡單的,ScriptEngineManager是ScriptEngine的工廠,實例化該工廠的時候會加載可用的所有腳本引擎。從工廠中創建ScriptEngine可以使用getEngineByName、getEngineByExtension或 getEngineByMimeType來得到,只要參數名字能對上。執行腳本調用eval方法即可(效果等同于JavaScript中的eval)。

3、傳遞變量

可以向腳本中傳遞變量,使得Java代碼可以和腳本代碼交互,示例如下:

  1. ScriptEngineManager manager = new ScriptEngineManager();  
  2.         ScriptEngine engine = manager.getEngineByName("js");  
  3.         engine.put("a"4);  
  4.         engine.put("b"6);  
  5.         try {  
  6.             Object maxNum = engine.eval("function max_num(a,b){return (a>b)?a:b;}max_num(a,b);");  
  7.             System.out.println("max_num:" + maxNum);  
  8.         } catch (Exception e) {  
  9.             e.printStackTrace();  
  10.         } 

輸出內容:max_num:6

對于上面put的變量,它作用于自身engine范圍內,也就是ScriptContext.ENGINE_SCOPE,put 的變量放到一個叫Bindings的Map中,可以通過 engine.getBindings(ScriptContext.ENGINE_SCOPE).get(“a”);得到put的內容。和ENGINE_SCOPE相對,還有個ScriptContext.GLOBAL_SCOPE 作用域,其作用的變量是由同一ScriptEngineFactory創建的所有ScriptEngine共享的全局作用域。

4、動態調用

上面的例子中定義了一個JavaScript函數max_num,可以通過Invocable接口來多次調用腳本庫中的函數,Invocable接口是 ScriptEngine可選實現的接口。下面是個使用示例:

  1. ScriptEngineManager manager = new ScriptEngineManager();  
  2.         ScriptEngine engine = manager.getEngineByName("js");  
  3.         try {  
  4.             engine.eval("function max_num(a,b){return (a>b)?a:b;}");  
  5.             Invocable invoke = (Invocable) engine;  
  6.             Object maxNum = invoke.invokeFunction("max_num",4,6);  
  7.             System.out.println(maxNum);  
  8.             maxNum = invoke.invokeFunction("max_num"7,6);  
  9.             System.out.println(maxNum);  
  10.         } catch (Exception e) {  
  11.             // TODO: handle exception  
  12.         } 

上面的invokeFunction,第一個參數調用的腳本函數名,后面跟的可變參數是對應的腳本函數參數。#p#

Invocable還有個很酷的功能,就是動態實現接口,它可以從腳本引擎中得到Java Interface 的實例;也就是說,可以定義個一個Java接口,其實現是由腳本完成。以上面的例子為例,定義接口JSLib,該接口中的函數和JavaScript中的函數簽名保持一致:

  1. public interface JSLib {  
  2.        public int max_num(int a,int b);  
  3.    } 

 

調用示例:

  1. ScriptEngineManager manager = new ScriptEngineManager();  
  2.         ScriptEngine engine = manager.getEngineByName("js");  
  3.         try {  
  4.             engine.eval("function max_num(a,b){return (a>b)?a:b;}");  
  5.             Invocable invoke = (Invocable) engine;  
  6.             JSLib jslib = invoke.getInterface(JSLib.class);  
  7.             int maxNum = jslib.max_num(4,6);  
  8.             System.out.println(maxNum);  
  9.         } catch (Exception e) {  
  10.             // TODO: handle exception  
  11.         } 

 

5、使用Java對象

可以在JavaScript中使用Java代碼,這確實是很酷的事情。在Rhino中,可以通過importClass導入一個類,也可以通過importPackage導入一個包,也可以直接使用全路經的類。在創建對象時,new也不是必須的。示例代碼如下:

  1. ScriptEngineManager manager = new ScriptEngineManager();  
  2.         ScriptEngine engine = manager.getEngineByName("js");  
  3.         try {  
  4.             String script = "var list = java.util.ArrayList();list.add(\"kafka0102\");print(list.get(0));";  
  5.             engine.eval(script);  
  6.         } catch (Exception e) {  
  7.             e.printStackTrace();  
  8.         } 

 

6、編譯執行

腳本引擎默認是解釋執行的,如果需要反復執行腳本,可以使用它的可選接口Compilable來編譯執行腳本,以獲得更好的性能,示例代碼如下:

  1. ScriptEngineManager manager = new ScriptEngineManager();  
  2.         ScriptEngine engine = manager.getEngineByName("js");  
  3.         try {  
  4.             Compilable compEngine = (Compilable) engine;  
  5.             CompiledScript script = compEngine.compile("function max_num(a,b){return (a>b)?a:b;}");  
  6.             script.eval();  
  7.             Invocable invoke = (Invocable) engine;  
  8.             Object maxNum = invoke.invokeFunction("max_num",4,6);  
  9.             System.out.println(maxNum);  
  10.         } catch (Exception e) {  
  11.             e.printStackTrace();  
  12.         } 

 

7、總結

除了上面提到的特性,腳本引擎還有一些不錯的功能,比如可以執行腳本文件,可以由多線程異步執行腳本等功能。引入腳本引擎,可以對一些配置擴展和業務規則做更強大而靈活的支持,也方便使用者選擇自己熟悉的腳本語言來編寫業務規則等。

 

責任編輯:佚名 來源: JavaEye的博客
相關推薦

2011-09-07 09:51:27

Javascript

2011-08-25 09:55:27

2010-02-26 13:03:31

Python腳本語言

2011-08-23 09:44:28

LUA腳本

2011-07-06 16:54:44

ASP

2010-03-17 17:06:10

python腳本語言

2010-07-26 15:32:08

Perl腳本語言

2009-06-10 08:41:15

Linux腳本語言

2011-08-22 18:00:53

Lua語言

2010-02-24 14:04:32

Python腳本語言

2020-10-13 19:04:58

Bash信號捕獲Shell腳本

2010-02-26 09:33:51

Python腳本

2012-07-16 11:23:18

LinuxWindows腳本語言

2011-08-25 10:40:21

Lua游戲

2011-08-22 16:59:28

Lua

2011-08-25 11:02:04

2011-08-16 10:03:45

Groovy編程語言Web

2011-05-25 13:22:05

PHPJSON

2011-08-22 18:08:09

Lua腳本

2010-07-26 15:55:51

Perl腳本語言
點贊
收藏

51CTO技術棧公眾號

成人欧美一区二区三区在线| 久久精品成人一区二区三区| 成人精品视频一区二区| av片在线免费观看| 国产成人免费av在线| 97视频在线观看视频免费视频| 三级网站在线免费观看| 人人九九精品视频| 日韩欧美亚洲范冰冰与中字| 宅男一区二区三区| 三区在线观看| 国产乱对白刺激视频不卡| 欧美在线视频网站| 欧美日韩三级在线观看| blacked蜜桃精品一区| 亚洲精品在线网站| 国内av一区二区| 欧美日韩精品在线观看视频| 国产黄色免费在线观看| 国产一区二区三区综合| 欧美在线视频观看免费网站| 国产女人18水真多毛片18精品| 天海翼精品一区二区三区| 91精品在线观看入口| 欧美国产综合在线| 免费av不卡| 久久综合色婷婷| 99re在线| 国产精品九九九九| 爽爽淫人综合网网站| 欧美激情久久久| 国产精品视频一区二区三| 国产一区二区三区天码| 亚洲电影中文字幕| 日本少妇xxx| 亚洲欧美专区| 欧美日韩高清影院| 激情五月亚洲色图| 欧美电影h版| 欧美日韩免费在线| 精品久久国产字幕高潮| 成人欧美在线观看| 在线观看毛片av| 日韩精品亚洲一区二区三区免费| 亚州成人av在线| 久久精品国产亚洲av麻豆色欲 | 日韩国产欧美一区二区三区| 午夜免费久久久久| 国产情侣在线视频| 激情小说亚洲色图| 久久九九免费| 欧美一级黑人aaaaaaa做受| 豆国产97在线 | 亚洲| 午夜激情一区| 久久久久久久久久久人体| 久久黄色免费网站| 日韩午夜在线| 日本精品久久久久影院| 在线免费观看国产精品| 日韩高清中文字幕一区| 国产精品亚洲网站| 国产乱色精品成人免费视频 | 黑丝一区二区三区| 久久久亚洲欧洲日产国码aⅴ| 激情综合网五月婷婷| 一区二区三区高清视频在线观看| 欧美一级成年大片在线观看| 国产免费一级视频| 久久99精品视频| 亚洲综合第一页| 欧美一级淫片免费视频魅影视频| 99视频一区二区三区| 欧美日韩一区二区三区在线观看免 | 亚洲最大的黄色网址| 欧美人与禽猛交乱配视频| 欧美福利视频网站| av一级在线观看| 美女网站色91| 操人视频欧美| 国产在线一在线二| 亚洲品质自拍视频| 日本福利视频一区| 高清成人在线| 日韩欧美色电影| 免费a级黄色片| 日韩1区2区| 欧美精品第一页在线播放| 91美女免费看| 激情综合五月婷婷| 国产一区二区三区无遮挡| 黄色软件在线| 亚洲综合999| 日本中文字幕片| www.欧美| 亚洲精品日韩欧美| 极品久久久久久| 校园春色综合网| 91最新在线免费观看| 天堂av在线7| 亚洲欧美成aⅴ人在线观看| 黄色免费观看视频网站 | 超碰97网站| 国产小视频免费在线观看| 亚洲综合色区另类av| 男女曰b免费视频| 永久免费精品视频| 伊人亚洲福利一区二区三区| 久久这里只有精品国产| 另类成人小视频在线| 久久av一区二区| 青春草视频在线观看| 欧美三级电影在线看| 亚洲国产精品成人综合久久久| 亚洲色图插插| 国产精品青草久久久久福利99| 日本久久一级片| 亚洲乱码中文字幕综合| 亚洲福利精品视频| 九九综合在线| 青青草原一区二区| 人妻一区二区三区| 一个色在线综合| 中文写幕一区二区三区免费观成熟| 精品视频免费| 日韩av快播网址| 午夜视频免费看| 亚洲午夜三级在线| 亚洲 自拍 另类 欧美 丝袜| 日韩啪啪电影网| 国产精品电影网| 国产日产精品久久久久久婷婷| 欧美日韩国产色视频| 特级特黄刘亦菲aaa级| 欧美阿v一级看视频| 91嫩草在线视频| 国产午夜精品久久久久免费视| 欧美午夜电影在线播放| 日本一级免费视频| 丝袜亚洲另类欧美综合| 欧美三级网色| 日本少妇一区| 一本一本久久a久久精品综合小说| 少妇高潮av久久久久久| 91首页免费视频| 91猫先生在线| 国产传媒欧美日韩成人精品大片| 日本亚洲精品在线观看| 牛牛澡牛牛爽一区二区| 色综合久久久久综合体| 麻豆精品免费视频| 日本在线观看不卡视频| 欧美裸身视频免费观看| 久久久精品视频国产| 天天影视天天精品| 亚洲一区二区免费在线| 手机在线免费av| 精品成人一区二区三区| 国产一级淫片a| 91视频xxxx| 天天干在线影院| 国产精品久久久久久久久久10秀 | 成人动漫视频| 欧美亚洲成人精品| eeuss影院www在线观看| 欧美精品xxxxbbbb| 青春草免费视频| 成人av在线网| 手机看片福利盒子久久| 亚洲啊v在线观看| 成人欧美视频在线| 天天免费亚洲黑人免费| 日韩亚洲在线观看| 日韩有码第一页| 色八戒一区二区三区| 国产精品99久久久久久成人| 成人中文字幕电影| 国产一区二区三区视频| 精品人妻一区二区三| 精品动漫3d一区二区三区免费版 | 欧美福利视频| 久久精品人成| 成人激情久久| 青青久久aⅴ北条麻妃| 欧美极品视频| 亚洲精品99久久久久中文字幕| 国产午夜无码视频在线观看| 亚洲色图在线视频| 色噜噜在线观看| 国产一区二区三区蝌蚪| 欧美精品一区二区三区三州| 日韩精品免费| 久久久久久久有限公司| 91精品福利观看| 欧美在线一级va免费观看| 激情影院在线观看| 亚洲丝袜在线视频| 成人免费一级视频| 欧美精品日韩综合在线| 国偷自拍第113页| 亚洲色图欧美在线| 免费看黄色的视频| 成人福利在线看| 在线视频观看一区二区| 丝袜美腿一区二区三区| 激情六月天婷婷| 成人在线免费小视频| 极品尤物一区二区三区| 警花av一区二区三区| 国产精品久久久av| 在线免费看h| 韩国三级日本三级少妇99| 国产福利在线播放麻豆| 有码中文亚洲精品| 日本福利片在线| 亚洲黄页视频免费观看| 精品人妻无码一区二区色欲产成人 | 久久久久亚洲精品| av在线影院| 精品国产一区二区三区久久久| 黄色片在线看| 亚洲另类激情图| 五月婷在线视频| 亚洲第一区第二区| 国产超碰人人模人人爽人人添| 欧美性生交片4| 狠狠人妻久久久久久综合| 五月婷婷激情综合网| 青青草原在线免费观看视频| 国产精品第一页第二页第三页| 无码一区二区三区在线| 久久午夜色播影院免费高清 | 午夜久久久久久久久久| 日韩一级欧美一级| 精品久久久久成人码免费动漫| 欧美日韩国产一区二区三区地区| 久久久国产免费| 欧美综合久久久| 国产精品51麻豆cm传媒| 色婷婷精品大在线视频| 草莓视频18免费观看| 色94色欧美sute亚洲线路一ni| 少妇一级淫片免费放中国| 精品av在线播放| 老熟妇仑乱一区二区av| 91国产福利在线| 一区二区三区日韩视频| 视频精品国内| 国产精品yjizz| 国产成人精品亚洲线观看| 999视频在线免费观看| 精品久久亚洲| 成人黄色在线免费观看| y111111国产精品久久久| 99久久99久久精品国产片| 99re91这里只有精品| 成人性色av| 欧美18xxxx| 日韩欧美精品一区二区| 久久视频国产| 国产日产欧美一区二区| 最新成人av网站| 日韩视频第二页| 日本不卡不码高清免费观看| 亚洲欧美日韩网站| 成人av网站大全| www.99热| 伊人开心综合网| 久久国产精品系列| 欧美性生交片4| 亚洲精品网站在线| 亚洲免费一级电影| 免费a级毛片在线播放| 欧美日韩成人在线观看| 国产伦理精品| 国产裸体写真av一区二区 | 美女在线免费视频| 亚洲韩日在线| www.com操| 成人午夜激情影院| 亚洲综合第一区| 亚洲国产精品久久久男人的天堂| 免费观看日批视频| 日韩精品一区二区三区四区视频| 色视频在线观看| 欧美成人合集magnet| 91精品论坛| 亚洲a区在线视频| 国产成人1区| 免费看毛片的网址| 免费观看30秒视频久久| 国产 xxxx| 亚洲精品伦理在线| 99成人精品视频| 亚洲精品大尺度| 成年视频在线观看| 国产精品成人在线| 欧美自拍视频| 18视频在线观看娇喘| 水野朝阳av一区二区三区| 欧洲熟妇的性久久久久久| 亚洲欧洲精品成人久久奇米网| 男人日女人网站| 亚洲成年人影院在线| 精品176二区| 国产精品中文久久久久久久| 日韩aaa久久蜜桃av| 乱熟女高潮一区二区在线| 美国毛片一区二区三区| 久久国产精品影院| 亚洲国产精品精华液网站| 国产喷水吹潮视频www| 最新国产精品亚洲| 日韩在线影院| 久久资源av| 日韩午夜一区| 一级少妇精品久久久久久久| 亚洲女人****多毛耸耸8| 中文字幕在线2018| 亚洲欧美在线看| 亚洲电影观看| 久久久久久99| 国产欧美一级| 美女黄色一级视频| 亚洲成人资源在线| 亚洲第一页视频| 欧美大片在线看免费观看| 国产一区二区三区黄网站| 亚洲一二三区精品| 日本不卡的三区四区五区| 日韩女同一区二区三区| 色婷婷狠狠综合| 国产高清av在线| 国产精品女主播| 日韩欧美视频专区| 毛片毛片毛片毛| 中文字幕在线观看不卡| 91在线公开视频| 久久久国产精品亚洲一区| 成人永久在线| 亚洲高潮无码久久| 撸视在线观看免费视频| 日韩三级成人av网| 91视频亚洲| 欧美 亚洲 视频| 成人免费高清视频在线观看| 国产性70yerg老太| 精品成人一区二区三区四区| caoprom在线| 麻豆精品视频| 日韩vs国产vs欧美| 天天操夜夜操av| 精品国产一区二区三区四区四| xxx.xxx欧美| 日本一区二区精品视频| 日本怡春院一区二区| 国产中文av在线| 精品久久人人做人人爰| 毛片电影在线| 日韩欧美亚洲日产国产| 麻豆一区二区三区| 国产一二三四在线| 亚洲另类图片色| 少妇高潮一区二区三区99| 精品久久久无码人妻字幂| 菠萝蜜视频在线观看一区| 一级片视频在线观看| 国产一区二区三区视频免费| 国产精品**亚洲精品| 久激情内射婷内射蜜桃| 国产亚洲一区二区在线观看| 91午夜交换视频| 久久人91精品久久久久久不卡| 免费成人av| 爱情岛论坛亚洲自拍| 欧美色视频日本版| 久草中文在线| 精品福利影视| 秋霞午夜av一区二区三区| 久草成人在线视频| 亚洲性69xxxbbb| 日韩欧美久久| 另类小说第一页| 亚洲一二三四在线| eeuss影院www在线播放| 国产精品久久久久久久久久直播| 丝袜美腿高跟呻吟高潮一区| 欧美另类视频在线观看| 亚洲欧美另类自拍| 亚洲国产视频二区| 亚洲成色www.777999| 亚洲一区二区三区小说| 国产精品免费观看| 国产尤物99| 国内成人自拍视频| 久久影视中文字幕| 久久久久久久999| 99久久精品网站| 国产精品无码一区二区三区| 91精品国产高清一区二区三区蜜臀| 在线一区av|