« ダイナミックバリアと視聴者位置センサによるメガネ不要位置自由3D | トップページ | WEB上で動的MathML生成:クライアントで構文解析を実行 »

WEBクライアントでJavaを動かす:DOMアクセスする

WEB、クライアント側でJavaを使う。
HTMLによるWEBページにJavaによる処理を反映させる単純な具体例/コードです。

グラフィック部品としてのアプレットは完全に廃れましたが、 複雑な論理を持つものはjavascriptでの構築が難しいことも あり、Javaで作り上げたものにアプレットをかぶせ、このような 形でクライアント側で動かすことは大きな発展性が見込めます。

本記事は実際に動く短いコードを示していますが、細かな説明は まだ載せていません。
補足に参考となるサイトなどを 載せました。

 JavascriptからJavaを単純に呼び出す。

JAppletの派生として作成したアプレットを<applet>でHTMLに 導入すればJavascriptから"アプレット名.関数名()"でJava による関数にアクセスできます。

単に小文字を大文字に変換するだけの関数を持つアプレットを Javascriptで呼び出しHTMLの画面に反映させてみます。

JavaプログラムAppletAcsTest.java

import javax.swing.JApplet;
public class AppletAcsTest extends JApplet {
   public String doIt(String str){
      return str.toUpperCase(); 
      }
   }

Javaコンパイル、Jar作成バッチ

javac   AppletAcsTest.java
jar -cf AppletAcsTest.jar AppletAcsTest.class

HTML記述

<html><head></head><body>
<applet id="app"  archive="AppletAcsTest.jar" code="AppletAcsTest"
        width="1" height="1" display="none"></applet>
<script type="text/javascript">
function test(id){
   var elm  = document.getElementById(id);
   elm.value= app.doIt(elm.value); // アプレット関数呼び出し
   }
</script>
<input type=text   id=t1 value="acsTest">
<input type=button value="doIt" onClick='test("t1")'>
<input type=button value="reset" 
       onClick='document.getElementById("t1").value="acsTest"'>
</body></html>

実際にこの記事に上記HTML記述のbody部のみ組み込んでみました。doItボタンを押すとtest() 関数からjavaで組まれたdoIt()関数を呼び出し、その結果をテキストインプットにセットして います。

ソースセット:AppletAcsTest.zip
Java,HTML,ビルド済みjar,ビルド用バッチが入っています。

ココログ記事の中に置いたapp.doIt()呼び出しはfirefoxでは動かないことが分かりました。 getElementById('app').doIt()とするとfirefoxでも動きます。IE,Chrome,Opera,Safariでは app.doIt()で問題なく動きます。firefoxでもソースセットに入れてある単体HTMLではapp.dpIt()でも 動きます。次の項のapp2.doIt()は動きます。 firefoxの不安定さにはいつも泣かされます。IEもうまく動かないことは多いのですが IEは動かないときは'必ず'動かないので楽です。

Javaで作成された構文解析ツールをWEBクライアント上で呼び出すサンプルを WEB上で動くMathML生成ツール に置きました。

 JavaでHTMLのDOMにアクセスする。

Java-Pluginを使用してHTMLのDOMにJavaアプレットからアクセスする単純例/コードです。

名前指定されたinput要素にJavaからアクセスし、valueを置き換える単純なプログラムです。

JavaプログラムAppletDomTest.java

import javax.swing.JApplet;
import org.w3c.dom.html.*;
import com.sun.java.browser.plugin2.DOM;
public class AppletDomTest extends JApplet {
   HTMLDocument doc;
   public void init() {
      try {
         doc = (HTMLDocument)DOM.getDocument(this);// HTML-document取得
         }
      catch (Exception ex) {}
      }
   public void doIt(String id){
      HTMLInputElement elm= (HTMLInputElement)(doc.getElementById(id));
      elm.setValue(elm.getValue().toUpperCase());
      }
   }

Javaコンパイル、Jar作成バッチ;plugin.jarを指定する必要があります。

javac -classpath "%JAVA_HOME%\jre\lib\plugin.jar" AppletDomTest.java
jar -cf AppletDomTest.jar AppletDomTest.class

HTML記述

<applet id="app2" archive="AppletDomTest.jar" code="AppletDomTest"
        width="1" height="1"></applet>
<input type=text   id=t2 value="domTest">
<input type=button value="doIt"  onClick='app2.doIt("t2")'>
<input type=button value="reset" 
       onClick='document.getElementById("t2").value="domTest"'>

実際にこの記事に上記HTML記述のbody部のみ組み込んでみました。doItボタンを押すとアプレット のdoIt()が呼ばれその中でテキストの置き換えを行っています。

ソースセット:AppletDomTest.zip
Java,HTML,ビルド済みjar,ビルド用バッチが入っています。

FireFox3.6.8でも動きます。

 補足

Javaの共通DOM-APIのjavadocは 共通DOM-APIにあります。

JAVA Plug-inの資料が 新しい Java™ Plug-In テクノロジでの LiveConnect サポートにあります。

Javaコントロールパネルの設定(Windowsの場合):
[スタート]-[設定]-[コントロールパネル]でコントロールパネルを出すと、中にコーヒーカップ マークの"Java"コントロールパネルがあります。これを起動します。
詳細/Java-Pluginで「次世代のJava Plug-inを有効にする」をチェックする必要があるかも しれません。

Java-コンソール:
Java-コントロールパネルの「詳細」の中のJavaコンソールを有効にしておくと、System.errや System.out(要flush)出力を見ることができます。

|

« ダイナミックバリアと視聴者位置センサによるメガネ不要位置自由3D | トップページ | WEB上で動的MathML生成:クライアントで構文解析を実行 »