Packages, java, sun, netscapeここら辺のお話

JavaScriptではJavaとの連携がすぐできるように実装されている。それを実現するのがPackages, java, sun, netscapeであり仕様はhttp://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Packagesこの辺に記載ある。簡単なサンプルとしてはid:shogo4405:20060825:1156489703で載せたプロパティのアクセスのコード(分かりにくいので以下に記載)をJavaScriptで動作するようにするに書き直すと

■PHPによるJavaオブジェクトへのアクセス
$system = new Java('java.lang.System');
print $system->getProperty('java.version');

■JavaScriptによるJavaオブジェクトへのアクセス
system = Packages.java.lan.System;
alert(system.getProperty('java.version'));

と上記のように書ける。IEでは駄目なのでFirefoxOpera(の高バージョン)からアクセスしてみるとコンピューターに搭載されているJavaのバージョンが表示されます。ちなみにjava, sun, netscapeは接頭のPackagesが不要。

Packages

面白いのがPackagesは自信で定義したJavaクラスにもアクセス可能な点。例えば以下ようなTest.classにクラスパスを通してあると以下のようにアクセスできるようになる。こういうことが出来るとJavaScriptからJava経由でデーターベースにアクセスしてdrop dbとか、drop tableとかできるじゃねぇ?〜という点が面白い。

test = Packages.Test;
print(test.text()); // Hello World!!
■Test.java
class Test
{
   static public String text(){ return "Hello World!!"; };
}

セキュリティの関係で

ブラウザからjava.io.Fileとかへのアクセスは難しい。シェルで動くRhinoとかSpiderMonkeyは未確認(今後検証します)

ところでFirefoxOperaで実行すると?

test = Packages.Test;
alert(test.text());

動きません。セキュリティー上からそのようになっているのかそれともある特定のフォルダに突っ込まないと動かないのか?と別に設定が必要なのでしょうか。気が向いたらまた調査しよう。

なにに利用できる?

クライアントサイドではIEでは実装されていないしJavaが動く環境ではないと利用できないので使えない!って結論にはならなくて、

  • 自分が作ったJavaクラスをスクリプト処理したい場合に活用できる(rhinoなどのシェル経由)
  • AJAJAでも利用できませんか?(疑問系)

実装は