X

An Oracle blog about Java Embedded, Japan

  • Event
    September 1, 2016

Applet を Java Web Start から起動する方法

主要なウェブブラウザでNPAPIを始めとするプラグインテクノロジをサポートしない、または今後サポートを終了する予定が発表されております。


Javaにおいても、その流れに合わせてJava Standard Edition 9 (Java SE 9)では Javaブラウザ・プラグインおよび、Applet API の非推奨化を進めています
Java アプレットの開発者およびシステム管理者はブラウザ・プラグインに依存しないプラグインフリーのテクノロジへの移行を検討する必要があります。

ここではプラグインフリーのテクノロジである Java Web Start を使って既存の Java アプレットの起動を行う方法を紹介します。


ブラウザブラグイン と Java Web Start の違い
Java Web Start
アプリケーションはブラウザプラグインと同様にアプリケーションのダウンロード及び起動する手段ですが、仕組みが大きく異なります。ブラウザプラグインはブラウザと同じプロセスで実行しますが、Java Web
Startではブラウザプロセスの外部で実行されます。ブラウザプラグインではHTMLの<APPLET>タグを使用しますが、Java
Web Starでは拡張子がjnlpとなる特別なXMLファイルを使いアプリケーションの情報を記述します。

※ jnlp ファイルの詳細につきましては「Java Web Start」「JNLPファイルの構文」のページを参照してください。

Applet を Web Star から実行
HTMLファイルに記述していたAppletの起動情報をjnlpファイルに記述します。以下の表にHTMLでの表現と対応するjnlpファイルでの表現を記載します。

HTMLでの表現
 JNLPでの表現
<applet codebase="http://www.foo.com/aaa">
<jnlp codebase="http://www.foo.com/aaa">
<applet archive="sample.jar">
<resources> <jar href="sample.jar">
<applet code="fooclass">
<applet-desc main-class="fooclass">
<applet width="512" height="256">
<applet-desc width="512" height="256">
<applet> <param name="paramA" value="1">
<applet-desc> <param name="paramA" value="1">

 以下に jnlp ファイルの簡単な例を記載します。

<jnlp codebase="http://www.foo.com/aaa" hlef="sample.jnlp" >
    ~ 略 ~
<resources>
        <jar href="applet.jar"/>
</resources>
<applet-desc
        main-class="ApletTest"
        width="300"
        height="500">


このjnlpファイルをウェブサーバに配置し、Appletを呼び出していたHTMLファイルをjnlpファイルへのリンクに変更します。
ただし注意点として、Java Web Startはブラウザと別のプロセスとなりますので、ブラウザセッションのCookieは継続して利用することができません。


jnlpファイルをサーバ配置できない場合
組込みシステムでの利用ケースなどで、ウェブサーバにjnlpを配置することができない場合は、クライアントPCにjnlpファイルを配布し、そこからAppletを起動することができます。
この場合、codebase は各ユーザの環境に依存するため指定せず、 resources タグの jar href を絶対パスで指定します。(codebaseはjnlpの配置場所となります)

<jnlp hlef="sample.jnlp" >
    ~ 略 ~
<resources>
        <jar href="http://www.foo.com/aaa/bbb/applet.jar"/>
</resources>
<applet-desc
        main-class="ApletTest"
        width="300"
        height="500">

この場合注意すべき点として、外部メディアの参照などでgetCodeBase()をAppletで使っている場合、jnlpファイルの配置場所が返されてしまい、サーバー上のファイルにアクセスできません。jnlpファイルと共にアクセスするファイルの配布も必要となります。


参考資料
https://docs.oracle.com/javase/tutorial/deployment/deploymentInDepth/jnlp.html
http://docs.oracle.com/javase/jp/8/docs/technotes/guides/deploy/ria_development.html
http://www.oracle.com/technetwork/jp/java/javase/documentation/migratingfromapplets-2872444-ja.pdf

Be the first to comment

Comments ( 0 )
Please enter your name.Please provide a valid email address.Please enter a comment.CAPTCHA challenge response provided was incorrect. Please try again.