読者です 読者をやめる 読者になる 読者になる

Java6でJavaScriptを試した

Java6が正式リリースされたので早速JavaScriptを試してみました。JRunScriptではなくjavax.script.*の検証です。とりあえずHello World!!から...

Hello World!!(Main.java)
import javax.script.*;

class Main
{
    static ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");

    static public void main(String args[])
    {
        // (I)
        try
        {
            engine.eval("println('Hello World!!')");
        }
        catch(ScriptException e)
        {
        };
    };
};
Hello World!!
グローバルオブジェクト
// for(i in this) println(i); の出力結果
println
context // javax.script.SimpleScriptContext
print
org
edu
javax
com
net

ところで…

JavaScriptから外部のJavaScriptファイルを読込む方法が標準でないようです。まぁ言語仕様でないから仕方ないか...。って言っていられないです。もしサーバサイドで利用しようと思った場合に外部ファイル読込がないのは困ります。

それJRunScriptで出来るよ

JavaScript上から外部JavaScriptの読込はJRunScript(Rhino)ではしっかり実装されています。load関数がそれにあたります。で、どうやっているか確認したら。JRunScriptにはengineって言うオブジェクトが存在していてそれを利用していることが分かりました。engineオブジェクトはScriptEngine自身。

println(typeof(engine)); // object

というわけで

上記Main.javaに以下のコードを(I)に追加。これでJavaScriptからScriptEngineが操作できるようになりました。

engine.put("engine", engine);

あとはJavaScriptでload関数の実装(手抜き)

function load(f)
{
    var r = new java.io.FileReader(f);
    engine.eval(r);
    r.close();
};
load("foo.js"); // で外部jsが実行される。

それ以外にも

Javaからload関数つくってバインドするっていう手もありでしょうか。

ただ

load関数相当が標準で欲しかったです...。これでますますJavaScriptJavaスクリプトって認識されることに(ならないか(?-?))