<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    DANCE WITH JAVA

    開發出高質量的系統

    常用鏈接

    統計

    積分與排名

    好友之家

    最新評論

    JDK6的新特性之十二:腳本語言支持(Scripting) (轉載)

    轉載自:http://blog.csdn.net/Chinajash/archive/2007/01/23/1491570.aspx
    JDK6增加了對腳本語言的支持(JSR 223),原理上是將腳本語言編譯成bytecode,這樣腳本語言也能享用Java平臺的諸多優勢,包括可移植性,安全等,另外,由于現在是編譯成bytecode后再執行,所以比原來邊解釋邊執行效率要高很多。加入對腳本語言的支持后,對Java語言也提供了以下好處。
    1、許多腳本語言都有動態特性,比如,你不需要用一個變量之前先聲明它,你可以用一個變量存放完全不同類型的對象,你不需要做強制類型轉換,因為轉換都是自動的。現在Java語言也可以通過對腳本語言的支持間接獲得這種靈活性。
    2、 可以用腳本語言快速開發產品原型,因為現在可以Edit-Run,而無需Edit-Compile-Run,當然,因為Java有非常好的IDE支持,我 們完全可以在IDE里面編輯源文件,然后點擊運行(隱含編譯),以此達到快速開發原型的目的,所以這點好處基本上可以忽略。
    3、通過引入腳本語言可以輕松實現Java應用程序的擴展和自定義,我們可以把原來分布在在Java應用程序中的配置邏輯,數學表達式和業務規則提取出來,轉用JavaScript來處理。

    Sun的JDK6實現包含了一個基于Mozilla Rhino的 腳本語言引擎,支持JavaScript,這并不是說明JDK6只支持JavaScript,任何第三方都可以自己實現一個JSR-223兼容的腳本引擎 使得JDK6支持別的腳本語言,比如,你想讓JDK6支持Ruby,那你可以自己按照JSR 223的規范實現一個Ruby的腳本引擎類,具體一點,你需要實現javax.script.ScriptEngine(簡單起見,可以繼承javax.script.AbstractScriptEngine)和javax.script.ScriptEngineFactory兩個接口。當然,在你實現自己的腳本語言引擎之前,先到scripting.dev.java.net project 這里看看是不是有人已經幫你做了工作,這樣你就可以直接拿來用就行。

    Scripting API

    Scripting API是用于在Java里面編寫腳本語言程序的API, 在Javax.script中可以找到Scripting API,我們就是用這個API來編寫JavaScript程序,這個包里面有一個ScriptEngineManager類,它是使用Scripting API的入口,ScriptEngineManager可以通過jar服務發現(service discovery)機制尋找合適的腳本引擎類(ScriptEngine),使用Scripting API的最簡單方式只需下面三步
    1、創建一個
    ScriptEngineManager對象
    2、通過ScriptEngineManager獲得ScriptEngine對象
    3、用ScriptEngineeval方法執行腳本

    下面是一個Hello World程序
    /**
    * @author chinajash
    */
    public class HelloScript {
    public static void main(String[] args) throws Exception {
    ScriptEngineManager factory = new ScriptEngineManager();//step 1
    ScriptEngine engine = factory.getEngineByName("JavaScript");//Step 2
    engine.eval("print('Hello, Scripting')");//Step 3
    }
    }
    運行上面程序,控制臺會輸出
    Hello, Scripting
    上面這個簡單的Scripting程序演示了如何在Java里面運行腳本語言,除此之外,我們還可以利用Scripting API實現以下功能
    1、暴露Java對象為腳本語言的全局變量
    2、在Java中調用腳本語言的方法
    3、腳本語言可以實現Java的接口
    4、腳本語言可以像Java一樣使用JDK平臺下的類
    下面的類演示了以上4種功能


    package Scripting;


    import java.io.File;
    import javax.script.Invocable;
    import javax.script.ScriptEngine;
    import javax.script.ScriptEngineManager;
    import javax.script.ScriptException;


    /**
    * @author chinajash
    */
    public class ScriptingAPITester {
    public static void main(String[] args) throws Exception {
    ScriptEngineManager manager = new ScriptEngineManager();
    ScriptEngine engine = manager.getEngineByName("JavaScript");
    testScriptVariables(engine);//演示如何暴露Java對象為腳本語言的全局變量
    testInvokeScriptMethod(engine);//演示如何在Java中調用腳本語言的方法
    testScriptInterface(engine);//演示腳本語言如何實現Java的接口
    testUsingJDKClasses(engine);//演示腳本語言如何使用JDK平臺下的類
    }

    public static void testScriptVariables(ScriptEngine engine) throws ScriptException{
    File file = new File("test.txt");
    engine.put("f", file);
    engine.eval("println('Total Space:'+f.getTotalSpace())");
    }

    public static void testInvokeScriptMethod(ScriptEngine engine) throws Exception{
    String script = "function hello(name) { return 'Hello,' + name;}";
    engine.eval(script);
    Invocable inv = (Invocable) engine;
    String res = (String)inv.invokeFunction("hello", "Scripting" );
    System.out.println("res:"+res);
    }

    public static void testScriptInterface(ScriptEngine engine) throws ScriptException{
    String script = "var obj = new Object(); obj.run = function() { println('run method called'); }";
    engine.eval(script);
    Object obj = engine.get("obj");
    Invocable inv = (Invocable) engine;
    Runnable r = inv.getInterface(obj,Runnable.class);
    Thread th = new Thread(r);
    th.start();
    }

    public static void testUsingJDKClasses(ScriptEngine engine) throws Exception{
    //Packages是腳本語言里的一個全局變量,專用于訪問JDK的package
    String js = "function doSwing(t){var f=new Packages.javax.swing.JFrame(t);f.setSize(400,300);f.setVisible(true);}";
    engine.eval(js);
    Invocable inv = (Invocable) engine;
    inv.invokeFunction("doSwing", "Scripting Swing" );
    }
    }

    Scripting Tool


    SUN提供的JDK6中有一個命令行工具——jrunscript,你可以在<JDK6_Home>/bin下面找到這個工具,jrunscript是一個腳本語言的解釋程序,它獨立于腳本語言,但默認是用JavaScript,我們可以用jrunscript來測試自己寫的腳本語言是否正確,下面是一個在命令行運行jrunscript的簡單例子
    jrunscript
    js>println("Hello,JrunScript");
    Hello,JrunScript
    js>9*8
    72.0
    js>

    posted on 2007-02-25 14:59 dreamstone 閱讀(731) 評論(0)  編輯  收藏 所屬分類: jdk相關

    主站蜘蛛池模板: 亚洲女久久久噜噜噜熟女| 免费看男女下面日出水视频| 亚洲s色大片在线观看| 一级黄色片免费观看| 亚洲高清无码专区视频| 另类图片亚洲校园小说区| 国产成人在线免费观看| 国产亚洲一卡2卡3卡4卡新区 | 日韩激情无码免费毛片| 亚洲人AV在线无码影院观看| 免费无码又爽又刺激聊天APP| 亚洲首页国产精品丝袜| 我想看一级毛片免费的| 午夜亚洲WWW湿好爽| 亚洲国产精品一区二区九九| 国产精品免费看久久久香蕉| 亚洲综合精品香蕉久久网| 久久久久久久久久国产精品免费| 色拍自拍亚洲综合图区| 日本一区二区三区免费高清| 亚洲AV无码男人的天堂| 国产亚洲精品资在线| 18观看免费永久视频| 亚洲人成电影网站色| 国产AV无码专区亚洲AV手机麻豆| 国产免费一区二区三区在线观看| 亚洲精品无码久久毛片波多野吉衣| 成年人免费视频观看| 一区在线免费观看| 亚洲国产高清人在线| 好爽…又高潮了免费毛片| 一区二区在线视频免费观看| 亚洲精品自产拍在线观看动漫| 久久午夜免费视频| 美国免费高清一级毛片| 亚洲AV日韩AV永久无码免下载| 青青草a免费线观a| 国产免费一级高清淫曰本片| 亚洲成aⅴ人片在线观| 日韩精品电影一区亚洲| **一级一级毛片免费观看|