JavaWebStartのガイド
1. 概要
この記事では、Java Web Start(JWS)とは何か、サーバー側でJava Web Startを構成する方法、および単純なアプリケーションを作成する方法について説明します。
ノート:
2. 序章
JWSは、クライアントのWebブラウザ用のJava SEに付属するランタイム環境であり、Javaバージョン5から使用されています。
WebサーバーからJNLPファイル(Java Network Launch Protocolとも呼ばれます)をダウンロードすると、この環境では、JNLPによって参照されるJARパッケージをリモートで実行できます。
簡単に言うと、このメカニズムは、通常のJREがインストールされているクライアントのコンピューターでJavaクラスをロードして実行します。 JakartaEEからの追加の指示も可能です。 ただし、セキュリティ制限はクライアントのJREによって厳密に適用され、通常、信頼できないドメイン、HTTPSの欠如、さらには署名されていないJARについてユーザーに警告します。
一般的なWebサイトから、JNLPファイルをダウンロードしてJWSアプリケーションを実行できます。 ダウンロードすると、デスクトップショートカットまたはJavaキャッシュビューアから直接実行できます。 その後、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パッケージ化することだけです。
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+"
codebase="http://localhost:8080/jnlp-example">
<information>
<title>Hello</title>
<vendor>Example</vendor>
</information>
<resources>
<j2se version="1.2+"/>
<jar href="hello.jar" main="true" />
</resources>
<application-desc/>
</jnlp>
hello.jndl という名前を付けて、WARの任意のWebフォルダーの下に配置します。 JARとWARはどちらもダウンロード可能であるため、JARをlibフォルダーに配置することを心配する必要はありません。
最終的なJARへのURLアドレスはJNLPファイルにハードコーディングされているため、配布の問題が発生する可能性があります。 デプロイメントサーバーを変更すると、アプリケーションは機能しなくなります。
この記事の後半で、適切なサーブレットを使用してこれを修正しましょう。 今のところ、ダウンロードするJARファイルを index.html としてルートフォルダーに配置し、アンカー要素にリンクします。
<a href="hello.jnlp">Launch</a>
JARマニフェストでメインクラスも設定しましょう。 これは、pom.xmlファイルでJARプラグインを構成することで実現できます。 同様に、JARファイルは WEB-INF / lib の外に移動します。これは、ダウンロードのみを目的としているためです。 クラスローダー用ではありません:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
...
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<archive>
<manifest>
<mainClass>
com.example.Hello
</mainClass>
</manifest>
</archive>
<outputDirectory>
${project.basedir}/target/jws
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
4. 特別な構成
4.1. セキュリティ上の問題
アプリケーションを実行するには、JARに署名する必要があります。 有効な証明書を作成してJARSignMavenプラグインを使用することは、この記事の範囲を超えていますが、開発目的で、またはユーザーのコンピューターへの管理アクセス権がある場合は、このセキュリティポリシーをバイパスできます。
これを行うには、アプリケーションが実行されるコンピューター上の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実行可能ファイル(通常、パス
JNLPを変更せずに、JARのjar.gzバージョンとjar.pack.gzバージョンを同じフォルダーに配置することにより、サーブレットは、リモートJNLP。 これにより、ユーザーエクスペリエンスが向上し、ネットワークトラフィックが最適化されます。
5.2. コードベースの動的置換
サーブレットは、ハードコードされたURLの動的置換を実行することもできます。
サーブレットは、ワイルドカード $$ codebase 、 $$ hostname 、 $$ name 、および $$siteとも連携します。 「http:// localhost:8080 / jnlp-example / 」、「 localhost:8080 」、「 hello.jnlp 」、「それぞれhttp:// localhost:8080」。
5.3. クラスパスへのサーブレットの追加
サーブレットを追加するには、JARおよびJNLPパターンの通常のサーブレットマッピングをweb.xmlに構成します。
<servlet>
<servlet-name>JnlpDownloadServlet</servlet-name>
<servlet-class>
jnlp.sample.servlet.JnlpDownloadServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>JnlpDownloadServlet</servlet-name>
<url-pattern>*.jar</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>JnlpDownloadServlet</servlet-name>
<url-pattern>*.jnlp</url-pattern>
</servlet-mapping>
サーブレット自体は一連のJARで提供されます( jardiff.jar と jnlp-servlet.jar )現在、JavaSDKダウンロードページのデモとサンプルセクションにあります。
GitHubの例では、これらのファイルは java-core-samples-lib フォルダーに含まれており、MavenWARプラグインによってWebリソースとして含まれています。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
...
<configuration>
<webResources>
<resource>
<directory>
${project.basedir}/java-core-samples-lib/
</directory>
<includes>
<include>**/*.jar</include>
</includes>
<targetPath>WEB-INF/lib</targetPath>
</resource>
</webResources>
</configuration>
</plugin>
6. 最終的な考え
Java Web Startは、アプリケーションサーバーがない(イントラネット)環境で使用できるツールです。 また、ローカルユーザーファイルを操作する必要があるアプリケーションの場合。
アプリケーションは、セキュリティ上の懸念(HTTPS、署名付きJARなど)を除いて、追加の依存関係や構成なしで、単純なダウンロードプロトコルによってエンドユーザーに出荷されます。
Gitの例では、この記事で説明されている完全なソースコードをダウンロードできます。 GitHubからTomcatとApacheMavenを搭載したOSに直接ダウンロードできます。 ダウンロード後、ソースディレクトリから mvn install コマンドを実行し、生成されたjws.warファイルをtargetからwebappsにコピーする必要があります。 Tomcatインストールのフォルダー。
その後、通常どおりTomcatを起動できます。
デフォルトのApacheTomcatインストールから、この例はURL http:// localhost:8080 / jws /index.htmlで入手できます。