伸进女同桌乳沟里摸爽了,小雪解开乳罩给老杨摸,少妇被按摩师摸高潮了,亲嘴扒胸摸屁股激烈视频,强摸秘书人妻大乳BD,摸BBB揉BBB揉BBB视频

新疆軟件開(kāi)發(fā)

本站首頁(yè) 軟件開(kāi)發(fā) 成功案例 公司新聞 公司簡(jiǎn)介 客服中心 軟件技術(shù) 網(wǎng)站建設(shè)
  您現(xiàn)在的位置: 新疆二域軟件開(kāi)發(fā)公司 >> Java技術(shù) >> 文章正文

如何動(dòng)態(tài)調(diào)用之Java腳本API

    我們不需要將動(dòng)態(tài)語(yǔ)言編譯為 Java字節(jié)碼就可以在 Java 應(yīng)用程序中使用它們。使用 Java Platform, Standard Edition 6 (Java SE)中添加的腳本包(并且向后兼容 Java SE 5),Java 代碼可以在運(yùn)行時(shí)以一種簡(jiǎn)單的、統(tǒng)一的方式調(diào)用多種動(dòng)態(tài)語(yǔ)言。本系列文章共分兩個(gè)部分,第 1 部分將介紹 Java 腳本 API 的各種特性。文章將使用一個(gè)簡(jiǎn)單的 Hello World 應(yīng)用程序展示 Java 代碼如何執(zhí)行腳本代碼以及腳本如何反過(guò)來(lái)執(zhí)行 Java 代碼。第 2 部分將深入研究 Java 腳本 API 的強(qiáng)大功能。

    Java 開(kāi)發(fā)人員清楚 Java 并不是在任何情況下都是最佳的語(yǔ)言。今年,1.0 版本的 JRuby 和 Groovy 的發(fā)行引領(lǐng)了一場(chǎng)熱潮,促使人們紛紛在自己的 Java 應(yīng)用程序中添加動(dòng)態(tài)語(yǔ)言。Groovy、JRuby、Rhino、Jython 和一些其他的開(kāi)源項(xiàng)目使在所謂的腳本語(yǔ)言中編寫(xiě)代碼并在 JVM 中運(yùn)行成為了可能(請(qǐng)參閱 參考資料)。通常,在 Java 代碼中集成這些語(yǔ)言需要對(duì)各種解釋器所特有的 API 和特性有所了解。

    Java SE 6 中添加的 javax.script 包使集成動(dòng)態(tài)語(yǔ)言更加容易。通過(guò)使用一小組接口和具體類,這個(gè)包使我們能夠簡(jiǎn)單地調(diào)用多種腳本語(yǔ)言。但是,Java 腳本 API 的功能不只是在應(yīng)用程序中編寫(xiě)腳本;這個(gè)腳本包使我們能夠在運(yùn)行時(shí)讀取和調(diào)用外部腳本,這意味著我們可以動(dòng)態(tài)地修改這些腳本從而更改運(yùn)行應(yīng)用程序的行為。

    Java 腳本 API

    腳本與動(dòng)態(tài)的對(duì)比

    術(shù)語(yǔ)腳本 通常表示在解釋器 shell 中運(yùn)行的語(yǔ)言,它們往往沒(méi)有單獨(dú)的編譯步驟。術(shù)語(yǔ)動(dòng)態(tài) 通常表示等到運(yùn)行時(shí)判斷變量類型或?qū)ο笮袨榈恼Z(yǔ)言,往往具有閉包和連續(xù)特性。一些通用的編程語(yǔ)言同時(shí)具有這兩種特性。此處首選腳本語(yǔ)言 是因?yàn)楸疚牡闹攸c(diǎn)是 Java 腳本 API,而不是因?yàn)樘峒暗恼Z(yǔ)言缺少動(dòng)態(tài)特性。

    2006 年 10 月,Java 語(yǔ)言添加了腳本包,從而提供了一種統(tǒng)一的方式將腳本語(yǔ)言集成到 Java 應(yīng)用程序中去。對(duì)于語(yǔ)言開(kāi)發(fā)人員,他們可以使用這個(gè)包編寫(xiě)粘連代碼(glue code),從而使人們能夠在 Java 應(yīng)用程序中調(diào)用他們的語(yǔ)言。對(duì)于 Java 開(kāi)發(fā)人員,腳本包提供了一組類和接口,允許使用一個(gè)公共 API 調(diào)用多種語(yǔ)言編寫(xiě)的腳本。因此,腳本包類似于不同語(yǔ)言(比如說(shuō)不同的數(shù)據(jù)庫(kù))中的 Java Database Connectivity (JDBC) 包,可以使用一致的接口集成到 Java 平臺(tái)中去。

    以前,在 Java 代碼中,動(dòng)態(tài)調(diào)用腳本語(yǔ)言涉及到使用各種語(yǔ)言發(fā)行版所提供的獨(dú)特類或使用 Apache 的 Jakarta Bean Scripting Framework (BSF)。BSF 在一個(gè) API 內(nèi)部統(tǒng)一了一組腳本語(yǔ)言(請(qǐng)參閱 參考資料)。使用 Java SE 6 腳本 API,二十余種腳本語(yǔ)言(AppleScript、Groovy、JavaScript、Jelly、PHP、Python、Ruby 和 Velocity)都可以集成到 Java 代碼中,這在很大程序上依賴的是 BSF。

    腳本 API 在 Java 應(yīng)用程序和外部腳本之間提供了雙向可見(jiàn)性。Java 代碼不僅可以調(diào)用外部腳本,而且還允許那些腳本訪問(wèn)選定的 Java 對(duì)象。比如說(shuō),外部 Ruby 腳本可以對(duì) Java 對(duì)象調(diào)用方法,并訪問(wèn)對(duì)象的屬性,從而使腳本能夠?qū)⑿袨樘砑拥竭\(yùn)行中的應(yīng)用程序中(如果在開(kāi)發(fā)時(shí)無(wú)法預(yù)計(jì)應(yīng)用程序的行為)。

    調(diào)用外部腳本可用于運(yùn)行時(shí)應(yīng)用程序增強(qiáng)、配置、監(jiān)控或一些其他的運(yùn)行時(shí)操作,比如說(shuō)在不停止應(yīng)用程序的情況下修改業(yè)務(wù)規(guī)則。腳本包可能的作用包括:

  ·在比 Java 語(yǔ)言更簡(jiǎn)單的語(yǔ)言中編寫(xiě)業(yè)務(wù)規(guī)則,而不用借助成熟的規(guī)則引擎。
  ·創(chuàng)建插件架構(gòu),使用戶能夠動(dòng)態(tài)地定制應(yīng)用程序。
  ·將已有腳本集成到 Java 應(yīng)用程序中,比如說(shuō)處理或轉(zhuǎn)換文件文章的腳本。
  ·使用成熟的編程語(yǔ)言(而不是屬性文件)從外部配置應(yīng)用程序的運(yùn)行時(shí)行為。
  ·在 Java 應(yīng)用程序中添加一門(mén)特定于域的語(yǔ)言(domain-specific language)。
  ·在開(kāi)發(fā) Java 應(yīng)用程序原型的過(guò)程中使用腳本語(yǔ)言。
  ·在腳本語(yǔ)言中編寫(xiě)應(yīng)用程序測(cè)試代碼。

  你好,腳本世界

    HelloScriptingWorld 類(本文中的相關(guān)代碼均可從 下載部分 獲得)演示了 Java 腳本包的一些關(guān)鍵特性。它使用硬編碼的 JavaScript 作為示例腳本語(yǔ)言。此類的 main() 方法(如清單 1 所示)將創(chuàng)建一個(gè) JavaScript 腳本引擎,然后分別調(diào)用五個(gè)方法(在下文的清單中有顯示)用于突出顯示腳本包的特性。

    清單 1. HelloScriptingWorld main 方法

public static void main(String[] args) throws ScriptException, NoSuchMethodException {

ScriptEngineManager scriptEngineMgr = new ScriptEngineManager();
ScriptEngine jsEngine = scriptEngineMgr.getEngineByName("JavaScript");

if (jsEngine == null) {
System.err.println("No script engine found for JavaScript");
System.exit(1);
}

System.out.println("Calling invokeHelloScript...");
invokeHelloScript(jsEngine);

System.out.println("\nCalling defineScriptFunction...");
defineScriptFunction(jsEngine);

System.out.println("\nCalling invokeScriptFunctionFromEngine...");
invokeScriptFunctionFromEngine(jsEngine);

System.out.println("\nCalling invokeScriptFunctionFromJava...");
invokeScriptFunctionFromJava(jsEngine);

System.out.println("\nCalling invokeJavaFromScriptFunction...");
invokeJavaFromScriptFunction(jsEngine);
}

    main() 方法的主要功能是獲取一個(gè) javax.script.ScriptEngine 實(shí)例(清單 1 中的前兩行代碼)。腳本引擎可以在特定的語(yǔ)言中加載并執(zhí)行腳本。它是 Java 腳本包中使用最為頻繁、作用最為重要的類。我們從 javax.script.ScriptEngineManager 獲取一個(gè)腳本引擎(第一行代碼)。通常,程序只需要獲取一個(gè)腳本引擎實(shí)例,除非使用了很多種腳本語(yǔ)言。

    ScriptEngineManager 類

    ScriptEngineManager 可能是腳本包中惟一一個(gè)經(jīng)常使用的具體類;其他大多數(shù)都是接口。它或許是腳本包中惟一的一個(gè)要直接或間接地(通過(guò) Spring Framework 之類的依賴性注入機(jī)制)實(shí)例化的類。ScriptEngineManager 可以使用以下三種方式返回腳本引擎:

  ·通過(guò)引擎或語(yǔ)言的名稱,比如說(shuō) 清單 1 請(qǐng)求 JavaScript 引擎。
  ·通過(guò)該語(yǔ)言腳本共同使用的文件擴(kuò)展名,比如說(shuō) Ruby 腳本的 .rb。
  ·通過(guò)腳本引擎聲明的、知道如何處理的 MIME 類型。
  
  本文示例為什么要使用 JavaScript?

    本文中的 Hello World 示例使用了部分 JavaScript 腳本,這是因?yàn)?JavaScript 代碼易于理解,不過(guò)主要還是因?yàn)?Sun Microsystems 和 BEA Systems 所提供的 Java 6 運(yùn)行時(shí)環(huán)境附帶有基于 Mozilla Rhino 開(kāi)源 JavaScript 實(shí)現(xiàn)的 JavaScript 解釋器。使用 JavaScript,我們無(wú)需在類路徑中添加腳本語(yǔ)言 JAR 文件。

    ScriptEngineManager 間接查找和創(chuàng)建腳本引擎。也就是說(shuō),當(dāng)實(shí)例化腳本引擎管理程序時(shí),ScriptEngineManager 會(huì)使用 Java 6 中新增的服務(wù)發(fā)現(xiàn)機(jī)制在類路徑中查找所有注冊(cè)的 javax.script.ScriptEngineFactory 實(shí)現(xiàn)。這些工廠類封裝在 Java 腳本 API 實(shí)現(xiàn)中;也許您永遠(yuǎn)都不需要直接處理這些工廠類。

    ScriptEngineManager 找到所有的腳本引擎工廠類之后,它會(huì)查詢各個(gè)類并判斷是否能夠創(chuàng)建所請(qǐng)求類型的腳本引擎 —— 清單 1 中為 JavaScript 引擎。如果工廠說(shuō)可以創(chuàng)建所需語(yǔ)言的腳本引擎,那么管理程序?qū)⒁蠊S創(chuàng)建一個(gè)引擎并將其返回給調(diào)用者。如果沒(méi)有找到所請(qǐng)求語(yǔ)言的工廠,那么管理程序?qū)⒎祷?null,清單 1 中的代碼將檢查 null 返回值并做出預(yù)防。

作者:baocl | 文章來(lái)源:賽迪網(wǎng)技術(shù)社區(qū) | 更新時(shí)間:2007-10-23 10:11:42

  • 上一篇文章:

  • 下一篇文章:

  • 相關(guān)文章:
    JAVA開(kāi)發(fā)的6個(gè)實(shí)踐的例子
    JAVA中的抽象類型的一些概念
    java語(yǔ)言開(kāi)發(fā)程序中的幾個(gè)例子大家看看
    了解java開(kāi)發(fā)語(yǔ)言在軟件開(kāi)發(fā)中的幾個(gè)誤區(qū)
    如何才能使用Java實(shí)現(xiàn)內(nèi)部領(lǐng)域的特定語(yǔ)言
    Java開(kāi)發(fā)學(xué)習(xí)小心使用Date以及Time類
    sun最近修補(bǔ)了一部分java的安全補(bǔ)丁
    Java程序員應(yīng)該了解那些開(kāi)源協(xié)議
    java性能優(yōu)化的一些見(jiàn)解
    解析c#語(yǔ)言和java語(yǔ)言最相似的地方
    軟件技術(shù)
    · 開(kāi)發(fā)語(yǔ)言
    · Java技術(shù)
    · .Net技術(shù)
    · 數(shù)據(jù)庫(kù)開(kāi)發(fā)
    最新文章  
    ·j2se 嵌入式腳本抓取引擎
    ·JAVA開(kāi)發(fā)的6個(gè)實(shí)踐的例子
    ·JBuilder7 / Weblogic7開(kāi)發(fā)
    ·JAVA中的抽象類型的一些概
    ·java語(yǔ)言開(kāi)發(fā)程序中的幾個(gè)
    ·了解java開(kāi)發(fā)語(yǔ)言在軟件開(kāi)
    ·如何才能使用Java實(shí)現(xiàn)內(nèi)部
    ·Java開(kāi)發(fā)學(xué)習(xí)小心使用Date
    ·Java程序員應(yīng)該了解那些開(kāi)
    ·java性能優(yōu)化的一些見(jiàn)解
    ·介紹JDK5.0一些collection
    ·基礎(chǔ)學(xué)習(xí):java中使用存儲(chǔ)
    ·解析c#語(yǔ)言和java語(yǔ)言最相
    ·Java語(yǔ)言學(xué)習(xí):jAVA中 的多
    ·Java是不是應(yīng)該增加新特性
    關(guān)于我們 | 軟件開(kāi)發(fā) | 下載試用 | 客服中心 | 聯(lián)系我們 | 友情鏈接 | 網(wǎng)站地圖 | 新疆電子地圖 | RSS訂閱
    版權(quán)所有 © 2016 新疆二域軟件開(kāi)發(fā)網(wǎng) www.zgna.net All Rights Reserved 新ICP備14003571號(hào)
    新疆軟件開(kāi)發(fā)總機(jī):0991-4842803、4811639.
    客服QQ:596589785 ;地址:新疆烏魯木齊北京中路華聯(lián)大廈A-5C 郵編:830000
     
    泰宁县| 南郑县| 乃东县| 津市市| 六枝特区| 韩城市| 新和县| 大兴区| 栖霞市| 临泉县| 双江| 长葛市| 江华| 楚雄市| 加查县| 汉源县| 师宗县| 瑞金市| 平潭县| 顺义区| 镇宁| 临漳县| 石狮市| 浦东新区| 桂林市| 汽车| 拜城县| 安宁市| 广德县| 马龙县| 错那县| 会东县| 呼玛县| 静乐县| 元朗区| 胶州市| 闸北区| 湘潭县| 汉源县| 凤山县| 凭祥市|