Java呼び出しJava Scriptスクリプトの例


スクリプトエンジンマネージャはScript Eginese Managerを構成しており、そのget Engine Factoresを呼び出す方法で、現在のJava環境にあるすべてのサポートエンジン工場を取得することができます.各エンジン工場の属性を循環的に取得することができます.以下のコードを参照してください.
public static void main(String[] args) {
        //            
        ScriptEngineManager manager = new ScriptEngineManager();
        //          ,         
        for (ScriptEngineFactory factory : manager.getEngineFactories()) {
            String engineName = factory.getEngineName();
            String engineVersion = factory.getEngineVersion();
            String languageName = factory.getLanguageName();
            String languageVersion = factory.getLanguageVersion();
            ScriptEngine engine = factory.getScriptEngine();
            System.out.println(String.format("    :%s\t    :%s\t    :%s\t    :%s\t",
                    engineName, engineVersion, languageName, languageVersion));
        }
    }
以上のプログラムは以下の結果を出力する可能性があります.
エンジン名:Oracle Nashorn    エンジンバージョン:1.8.0_152    言語名:ECMAScript    言語バージョン:ECMA-262 Edition 5.1     JavaはJavaScriptスクリプトを呼び出します.まずスクリプトエンジンマネージャを構築することにより、すべてのサポートエンジン工場を得て、JSエンジンをサポートするかどうかを判断します.サポートすれば、JSスクリプトを実行することができます.以下の完全コードを参照してください.
package me.zebe.cat;

import javax.script.*;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;

/**
 *   JavaScript    
 * @author Zebe
 */
public class CallJavaScriptDemo {

    /**
     *     
     * @param args     
     */
    public static void main(String[] args) {
        //            
        ScriptEngineManager manager = new ScriptEngineManager();
        //          ,         
        for (ScriptEngineFactory factory : manager.getEngineFactories()) {
            String engineName = factory.getEngineName();
            String engineVersion = factory.getEngineVersion();
            String languageName = factory.getLanguageName();
            String languageVersion = factory.getLanguageVersion();
            ScriptEngine engine = factory.getScriptEngine();
            System.out.println(String.format("    :%s\t    :%s\t    :%s\t    :%s\t",
                    engineName, engineVersion, languageName, languageVersion));
            //     JavaScript
            if ("ECMAScript".equals(languageName)) {
                callSimpleJavaScript(engine);
                callJavaScriptFromFile(engine);
            }
        }
    }

    /**
     *         JavaScript  
     * @param engine     
     */
    private static void callSimpleJavaScript(ScriptEngine engine) {
        try {
            final String script1 = "var k = 0;";
            final String script2 = "k + 5;";
            System.out.println(script1 + "       :" + engine.eval(script1));
            System.out.println(script2 + "       :" + engine.eval(script2));
        } catch (ScriptException e) {
            e.printStackTrace();
        }
    }

    /**
     *  JavaScript    JavaScript  
     * @param engine     
     */
    private static void callJavaScriptFromFile(ScriptEngine engine) {
        try {
            final String fileName = "test.js";
            File file = new File(fileName);
            if (file.exists()) {
                System.out.println("  " + fileName + "       :" + engine.eval(new FileReader(file)));
            } else {
                System.err.println(fileName + "    ,      ");
            }
        } catch (ScriptException | FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}
ミニスクリプトエンジンは、特定の言語で作成されたスクリプトを実行することができるライブラリです.JavaはJavaScriptの呼び出しをサポートするだけでなく、Grouvy、Ruby、さらにはSchemeやHaskellなどの言語で作成されたスクリプトを含む他のタイプのスクリプトの呼び出しをサポートします.本論文では簡単なデモしか行いません.JavaのJavaScript関数に対する呼び出しは見せていません.読者自身で研究してください.