JAR は Java ARchive の略です。これは普及している ZIP ファイル形式に基づくファイル形式で、多数のファイルを 1 つにまとめるために使用されます。JAR は、一般的なアーカイブツールとして使用できますが、これを開発した主な動機は、Java アプレットおよびその必須のコンポーネント (.class ファイル、イメージと音声) が各々に対して新しい HTTP 接続を開くことなく単一の HTTP トランザクションで、ブラウザにダウンロードできるようにすることでした。これはアプレットを Web ページにロードし機能させる速度を大きく改善します。JAR 形式は、さらに圧縮をサポートし、ファイルのサイズを縮小しダウンロードの時間をさらに改善します。 さらに、アプレットの作成者が、JAR ファイルの個別のエントリにデジタル署名して、その起源を認証することができます。
JAR は次のようなものです。
JAR は PKWARE で定義されている zip アーカイブからなり、マニフェストファイルを含み、マニフェストフォーマット仕様で定義されているような署名ファイルを含むこともあります。
<applet code=Animator.class archive="jars/animator.jar" width=460 height=160> <param name=foo value="bar"> </applet>従来からある CODE=myApplet.class パラメータも、依然として必要であることに注意してください。CODE パラメータは、従来と同じく、実行が開始されるアプレットの名前を識別します。しかし、アプレットのクラスファイルとそのヘルパークラスはすべて JAR ファイルからロードされます。
ARCHIVE 属性は、プリロードされるクラスとその他のリソースを含む 1 つ以上の JAR ファイルを記述します。クラスは、指定した CODEBASE で AppletClassLoader のインスタンスを使用してロードされます。これは、archive = archiveList の形式で記述します。archiveList のアーカイブは「,」で区切ります (ただし、JDK 1.1 では、同じ CODEBASE を持つ複数のアプレットタグは、ClassLoader の同じインスタンスを共有する)。この方法は、アプレット間通信を実装するために、クライアントコードにも使用されます。今後、JDK ではアプレット間通信のためのほかの機構を提供する予定です。セキュリティ上の理由により、アプレットのクラスローダは、そのアプレットが起動されたコードベースからしか読み取ることができません。つまり、archiveList のアーカイブは、コードベースと同じディレクトリ、またはそのサブディレクトリにある必要があります。../a/b.jar 形式の archiveList のエントリは、セキュリティポリシーファイルで明示的に許可されない限り動作しません。ただし、http コードベースの場合は除きます。http コードベースでは、archiveList のアーカイブがコードベースと同じホストに由来するものでなければなりませんが、パスに「..」を含んでいてもかまいません。
アーカイブファイルは、いったん識別されると、ダウンロードされ、コンポーネントに分離されます。アプレットの実行中に、新しいクラス、イメージまたはオーディオクリップがアプレットによって要求されたとき、最初にアプレットに関連するアーカイブ内で検索されます。ダウンロードされたアーカイブの中でファイルが見つからない場合、アプレットサーバ上で CODEBASE からの相対位置を検索します。つまり、JDK1.0.2 での検索方法と同様です。
archive タグは、複数の JAR ファイルを指定することがあります。各 JAR ファイルは「,」(コンマ) で分離する必要があります。順番に各ファイルがダウンロードされます。
<applet code=Animator.class archive="classes.jar , images.jar , sounds.jar" width=460 height=160> <param name=foo value="bar"> </applet>アーカイブパラメータのエントリの間には、いくつでも空白を入れることができます。さらに、archive タグ自体は、大文字と小文字を区別しません。このため、小文字だけ、大文字だけ、または「ArCHiVe」のように大文字と小文字を組み合わせて指定することができます。