SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

日はまた昇る「Javaアプレット」をもう一度

アプレットは過去の技術にあらず Javaアプレット再考

  • X ポスト
  • このエントリーをはてなブックマークに追加

サーバーにリクエストする

 ネットワークから直接実行されるJavaアプレットは、ローカルディスク上のファイルに対して入出力を行うことはできません。当然、悪意あるプログラムからクライアントを守るためです。このセキュリティはサンドボックスと呼ばれ、アプレットはサンドボックス内で動作します。その代り、アプレットを配信したサーバーのドメインに対してHTTPリクエストを送信することは可能です。JavaScriptにおけるXmlHttpRequestのように、自身を配信したサーバーと通信することができます。

 つまり、Javaアプレットは必要に応じて自分自身を配信したサーバーに問い合わせ、必要なファイルや情報を取得することができます。ユーザーの入力や要求に応じてサーバーに接続し、新しいコンテンツをダウンロードして表示したり、データをサーバにアップロードすることが可能です。そのため、Ajaxと同じアプローチでページ遷移が発生しないサイトをデザインすることができます。

sample02 「Test.java」
import java.io.*;
import java.net.*;
import javax.swing.*;

public class Test extends JApplet {
    public void init() {
        String text = "";
        String paramURL = getParameter("url");

        if (paramURL == null) text = "URL が指定されていません";
        else try {
            URL url = new URL(getDocumentBase(), paramURL);
            InputStream stream = url.openStream();
            BufferedReader reader =
                new BufferedReader(new InputStreamReader(stream));
            while(true) {
                String line = reader.readLine();
                if (line == null) break;
                text += line;
            }
            reader.close();
            stream.close();
        }
        catch(Exception err) {
            text = err.toString();
        }

        getContentPane().add(new JLabel(text));
    }
}
sample02 「index.html」
<html>
 <head>
  <title>sample</title>
 </head>

 <body>
  <applet code="Test.class" width="400" height="200">
   <param name="url" value="test.txt" />
  </applet>
 </body>
</html>

 sample02は、アプレットと同じディレクトリに配置されている「test.txt」ファイルを読み込み、アプレットに表示するというプログラムです。テキストファイルは、アプレットがブラウザ上で実行されたときに動的に読み込んでいます。読み込むファイルのアドレスは、HTMLファイルのparam要素で指定されたurlという名前のパラメータで指定しています。そのため、読み込むファイルのアドレス自身も実行時に動的に決定されます。

 このサンプルで読み込んでいるのは単純なテキストファイルですが、サーバー側スクリプトで動的に生成されるデータなどを要求すれば、アプレットの可能性が広がります。サーバー側スクリプトがクエリに従ってデータベースに問い合わせ、その結果をアプレットに返すといった方法が考えられます。こうすれば、アプレットは小さなJavaプログラムでありながら、膨大なデータベースの情報を背景に動作することになります。

JavaとJavaScriptの関係

 さらに強力なアプレットの構築方法に、HTML内のJavaScriptとの連携があります。JavaScriptからJavaアプレットが公開するメソッドに簡単にアクセスすることができるため、文字列などの基本的な情報であればJavaとJavaScriptとの間でも交換することができます。

 例えば、Swingによるユーザーインターフェイスの構築は煩雑なので、簡単なフォームをHTML+JavaScriptで構築し、入力された情報をアプレットに渡して処理するといった利用方法があります。JavaアプレットではJava標準クラスライブラリが提供する多くの優れた機能を使うことができるため、限られたJavaScript内では難しい処理も、比較的容易に実現することができます。画像の変換処理など、JavaScript単体ではできない高度なグラフィックス制御などでアプレットが役立つでしょう。

sample03 「Test.java」
import javax.swing.*;

public class Test extends JApplet {
    private JLabel label;
    public void init() {
        label = new JLabel("テキストを入力してください");
        getContentPane().add(label);
    }

    public void setText(String text) {
        label.setText(text);
    }
    public String getText() {
        return label.getText();
    }
}
sample03 「index.html」
<html>
 <head>
  <title>sample</title>
  <script type="text/javascript">
function okClick(event) {
 var appletText = document.getElementById("text");
 var inputMessage = document.getElementById("message");
 appletText.setText(inputMessage.value);
 alert(appletText.getText());
}
function getClick(event) {
 var appletText = document.getElementById("text");
 var spanLabel = document.getElementById("label");
 spanLabel.innerHTML = appletText.getText();
}
  </script>
 </head>

 <body>
  <applet id="text" code="Test.class" width="400" height="200">
  </applet>
  <p>
   <input type="text" id="message" />
   <input type="button" value="OK" onclick="okClick();" />
  </p>
  <p>
   <span id="label">アプレットのテキストを表示します</span>
   <input type="button" value="取得" onclick="getClick();" />
  </p>
 </body>
</html>

 sample03のHTMLファイルを表示すると、アプレットの下部にテキストボックスとボタンが表示されています。テキストボックスに任意のテキストを入力して[OK]ボタンを押すと、テキストがアプレットに転送され、表示されることを確認できます。

 また[取得]ボタンを押すと、現在アプレットに設定されているテキストがspan要素の内容として表示されます。これは、アプレットのgetText()メソッドを呼び出して、アプレットからデータを取得しています。

 Javaアプレットは高度な機能と自由度の高いグラフィックス機能を持ち合わせていますが、その一方でHTMLとの親和性が低く、書式付の文書を表示するには適していません。そこで、文書の表示に適しているHTML+JavaScriptの組み合わせとアプレットを通信させ、それぞれのメリット、デメリットを補い合うという方法です。

次のページ
最強の柔軟性Java内JavaScript

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

赤坂 玲音(アカサカ レオン)

平成13年度「全国高校生・専門学校生プログラミングコンテスト 高校生プログラミングの部」にて最優秀賞を受賞。2005 年度~ Microsoft Most Variable Professional Visual Developer - Visual C++。プログラミング入門サイト WisdomSoft の管理人。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/1270 2007/05/17 08:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング