Java Web Startのガイド
1. 概要
この記事では、Java Web Start(JWS)とは何か、サーバー側でJava Web Startを構成する方法、および単純なアプリケーションを作成する方法について説明します。
2. 前書き
JWSは、クライアントのWebブラウザ用のJava SEに付属するランタイム環境であり、Javaバージョン5から使用されています。
WebサーバーからJNLPファイル(Java Network Launch Protocolとも呼ばれる)をダウンロードすることで、この環境ではリモートで参照されるJARパッケージを実行できます。
簡単に言うと、このメカニズムは、通常のJREインストールを使用してクライアントのコンピューターにJavaクラスをロードして実行します。 Java EEからの追加の命令も許可されます。 ただし、セキュリティ制限はクライアントのJREによって厳密に適用され、通常、信頼できないドメイン、HTTPSの欠如、さらには署名されていないJARについてユーザーに警告します。
一般的なWebサイトから、JNLPファイルをダウンロードしてJWSアプリケーションを実行できます。 ダウンロードしたら、デスクトップショートカットまたはJava Cache Viewerから直接実行できます。 その後、JARファイルをダウンロードして実行します。
このメカニズムは、安全なファイル転送アプリケーション、関数電卓、安全なキーボード、ローカル画像ブラウザなど、Webベースではない(HTMLフリー)グラフィカルインターフェイスを提供するのに非常に役立ちます。
3. シンプルなJNLPアプリケーション
適切なアプローチは、アプリケーションを作成し、通常のWebサーバー用のWARファイルにパッケージ化することです。 必要なのは、目的のアプリケーションを(通常はSwingを使用して)書き、それをJARファイルにパッケージ化することだけです。 次に、このJARは、アプリケーションのMainクラスを通常どおり参照、ダウンロード、および実行するJNLPとともにWARファイルにパッケージ化する必要があります。
以下に示すように、JWSを有効にするためにJNLPファイルが必要であるという事実を除いて、WARファイルにパッケージ化された通常のWebアプリケーションと違いはありません。
3.1. Javaアプリケーション
簡単なJavaアプリケーションを作成することから始めましょう。
public class Hello {
public static void main(String[] args) {
JFrame f = new JFrame("main");
f.setSize(200, 100);
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel label = new JLabel("Hello World");
f.add(label);
f.setVisible(true);
}
}
これは非常に単純なSwingクラスであることがわかります。 実際、JWS準拠にするために追加されたものはありません。
3.2. ウェブアプリケーション
必要なのは、このSwingクラスの例を次のJNLPファイルと共にWARファイルにJARパッケージ化することです。
Hello
Example
hello.jndlという名前を付けて、WARの任意のWebフォルダーの下に配置します。 JARとWARはどちらもダウンロード可能であるため、JARをlibフォルダーに配置することを心配する必要はありません。
最終的なJARへのURLアドレスはJNLPファイルにハードコードされているため、配布の問題が発生する可能性があります。 デプロイメントサーバーを変更すると、アプリケーションは機能しなくなります。
この記事の後半で、適切なサーブレットを使用してこれを修正しましょう。 今のところ、ダウンロード用のJARファイルをルートフォルダーにindex.htmlとして配置し、アンカー要素にリンクします。
Let’s also set the main class in our JAR Manifest。 これは、pom.xmlファイルでJARプラグインを構成することで実現できます。 同様に、JARファイルはダウンロードのみを目的としているため、WEB-INF/libの外に移動します。 クラスローダー用ではありません:
org.apache.maven.plugins
maven-jar-plugin
...
compile
jar
com.example.Hello
${project.basedir}/target/jws
4. 特別な構成
4.1. セキュリティ上の問題
アプリケーションを実行するには、we need to sign the JAR。 有効な証明書を作成してJARSign Mavenプラグインを使用することはこの記事の範囲を超えますが、開発目的で、またはユーザーのコンピューターへの管理アクセス権がある場合は、このセキュリティポリシーをバイパスできます。
これを行うには、アプリケーションが実行されるコンピューター上のJREインストールのセキュリティ例外リストにローカルURL(たとえば、http://localhost:8080)を追加する必要があります。 [セキュリティ]タブの[Javaコントロールパネル](Windowsの場合は[コントロールパネル]から見つけることができます)を開くと見つかります。
5. JnlpDownloadServlet
5.1. 圧縮アルゴリズム
WARに含めることができる特別なサーブレットがあります。 利用可能な場合は、JARファイルの最も圧縮されたコンパイル済みバージョンを探すことでダウンロードを最適化し、JLNPファイルのハードコードされたcodebase値も修正します。
JARはダウンロードできるようになるため、Pack200などの圧縮アルゴリズムを使用してパッケージ化し、通常のJARとJAR.PACK.GZまたはJAR.GZ圧縮バージョンを同じフォルダーに配信して、このサーブレットができるようにすることをお勧めします。それぞれの場合に最適なオプションを選択してください。
残念ながら、この圧縮アルゴリズム用のMavenプラグインの安定バージョンはまだありませんが、JREに付属しているPack200実行可能ファイル(通常はパス{JAVA_SDK_HOME}/jre/bin/にインストールされています)で動作する可能性があります。
JNLPを変更せずに、JARのjar.gzバージョンとjar.pack.gzバージョンを同じフォルダーに配置することで、サーブレットはリモートJNLPから呼び出しを取得すると、より適切なバージョンを選択します。 これにより、ユーザーエクスペリエンスが向上し、ネットワークトラフィックが最適化されます。
5.2. コードベースの動的置換
サーブレットは、<jnlp spec=”1.0+” codebase=”http://localhost:8080/jnlp-example”>タグ内のハードコードされたURLの動的置換を実行することもできます。 JNLPをワイルドカード<jnlp spec=”1.0+” codebase=”$$context”>に変更することにより、同じ最終レンダリングタグを配信します。
サーブレットはワイルドカードcodebase_, _hostname、name_ and _siteでも機能し、「http://localhost:8080/jnlp-example/」、「localhost:8080」、「hello.jnlp」、および「%(それぞれt5)s」。
5.3. クラスパスへのサーブレットの追加
サーブレットを追加するには、JARおよびJNLPパターンの通常のサーブレットマッピングをweb.xmlに構成しましょう。
JnlpDownloadServlet
jnlp.sample.servlet.JnlpDownloadServlet
JnlpDownloadServlet
*.jar
JnlpDownloadServlet
*.jnlp
サーブレット自体は、Java SDKダウンロードページのデモとサンプルセクションにあるJARのセット(jardiff.jarとjnlp-servlet.jar)で提供されます。
GitHubの例では、これらのファイルはjava-core-samples-libフォルダーに含まれており、MavenWARプラグインによってWebリソースとして含まれています。
org.apache.maven.plugins
maven-war-plugin
...
${project.basedir}/java-core-samples-lib/
**/*.jar
WEB-INF/lib
6. 最終的な考え
Java Web Startは、アプリケーションサーバーがない(イントラネット)環境で使用できるツールです。 また、ローカルユーザーファイルを操作する必要があるアプリケーション用。
セキュリティ上の懸念(HTTPS、署名付きJARなど)を除き、アプリケーションは追加の依存関係や構成なしで、単純なダウンロードプロトコルによってエンドユーザーに出荷されます。
Git Exampleでは、この記事で説明されている完全なソースコードをダウンロードできます。 GitHubからTomcatとApache Mavenを使用してOSに直接ダウンロードできます。 ダウンロード後、ソースディレクトリからmvn installコマンドを実行し、生成されたjws.warファイルをtargetからTomcatインストールのwebappsフォルダーにコピーする必要があります。
その後、通常どおりTomcatを起動できます。
デフォルトのApacheTomcatインストールから、この例はURLhttp://localhost:8080/jws/index.htmlで入手できます。