このトピックでは、コード・ベースがJNLPファイルで指定されていない場合に、Java Web Startアプリケーションのコード・ベースを決定する方法について説明します。
JNLPファイルでは、コード・ベースは<jnlp>
タグのオプション・パラメータです。コード・ベースは、そのJNLPファイルに記述されているリソースを見つけるためと、そのJNLPファイル自体を検索するための両方の目的に使用されます。技術的な理由から、絶対コード・ベースが指定されていないかぎり、Java Web StartはサーバーからJNLPファイルの内容を更新できません。
コード・ベースは、明示的に指定されたか、またはHTMLドキュメントの場所から暗黙的に取得されたかのどちらかの理由で、常にブラウザによって提供されます。これにより、JNLPファイル内で、コンテンツのツリー全体をあるサーバーから別のサーバーに移動する場合に非常に有効な相対URLを使用できるようになります。
この節の内容は以下のとおりです。
JNLPファイルでは、コード・ベースは<jnlp>
タグのオプション・パラメータです。コード・ベースは、そのJNLPファイルに記述されているリソースを見つけるためと、そのJNLPファイル自体を検索するための両方の目的に使用されます。技術的な理由から、絶対コード・ベースが指定されていないかぎり、Java Web StartはサーバーからJNLPファイルの内容を更新できません。
コード・ベースは、明示的に指定されたか、またはHTMLドキュメントの場所から暗黙的に取得されたかのどちらかの理由で、常にブラウザによって提供されます。これにより、JNLPファイル内で、コンテンツのツリー全体をあるサーバーから別のサーバーに移動する場合に非常に有効な相対URLを使用できるようになります。
JNLPファイルは、ツリー構造内のほかのJNLPファイルを参照します。JNLPアプレットのルートJNLPファイルは、<applet>
タグによって参照されます。APPLETタグのコード・ベースは、ルートJNLPファイルの場所を定義するのに役立ちます。
コード・ベース計算の規則は次のとおりです。
JNLPファイルで絶対コード・ベースが指定されている場合は、そのコード・ベースが使用されます。これは下位互換性のために必要です。
JNLPコード・ベースが指定されていない場合は、JNLPファイルを含むディレクトリが使用されます。
それ以外の場合は、JNLPのコード・ベースがJNLPファイルを含むディレクトリにマージされます。
単純なJavaの用語で、これを次の例に示すように表現できます。
URL new_codebase = new URL(current_jnlp_dir, current_jnlp_codebase);
このコード・ベース計算はJSR-56の拡張ではありません。JSR-56ではコード・ベースは絶対値に制限されるわけではないので、相対値も指定できます。
例1:
this JNLP's location: http://someserver.example.com/this.jnlp this JNLP's codebase: http://www.example.com/test/ resulting codebase for parsing this JNLP: http://www.example.com/test/
例2:
this JNLP's location: http://www.example.com/test2/this.jnlp this JNLP's codebase: <none> resulting codebase for parsing this JNLP: http://www.example.com/test2/
例3:
this JNLP's location: http://www.example.com/this.jnlp this JNLP's codebase: codebasedir resulting codebase for parsing this JNLP: http://www.example.com/codebasedir
例4:
相対パスは、HTMLファイルのツリーの場合と同様に、入れ子の各JNLPを参照するために使用されます。
www.example.com/html/my_applet.html refers to: my_applet.jnlp codebase: www.example.com/html my_applet.jnlp: codebase not specified inherits "www.example.com/html" references JNLP extension "jogl/jogl.jnlp" jogl/ jogl.jnlp codebase not specified inherits "www.example.com/html/jogl" (the directory containing jogl.jnlp) references gluegen-rt/gluegen-rt.jnlp gluegen-rt/ gluegen-rt.jnlp codebase not specified inherits "www.example.com/html/jogl/gluegen-rt" (the directory containing gluegen-rt.jnlp)