2.23.2  JSPファイルおよびタグファイルのコンパイルと実行

Webアプリケーションのバージョン設定機能を使用する際で,JSPファイルおよびタグファイルのコンパイル時と実行時でJSP仕様のバージョンが異なる場合の実行時の動作について説明します。ここでは,JSP事前コンパイル機能を使用している場合と,使用していない場合に分けて説明します。

<この項の構成>
(1) JSP事前コンパイル機能を使用している場合
(2) JSP事前コンパイル機能を使用していない場合

(1) JSP事前コンパイル機能を使用している場合

JSP事前コンパイル機能では,JSPファイルのコンパイル時に,JSPファイルから生成されたクラスファイルだけでなく,バージョン情報ファイルも作成されます。バージョン情報ファイルは,JSP事前コンパイル機能実行時に出力されるファイルで,JSPファイルのバージョンが記載されています。

このため,JSPのバージョンが異なる状態には,次の二つの場合があります。

それぞれの場合について,Webアプリケーションの動作を,次の表に記述します。

表2-69 バージョン情報ファイルとJSP仕様のバージョンが異なる場合

ファイル変更のタイミングWebアプリケーションの動作
Webアプリケーション開始前ケース1
Webアプリケーション開始後リロード有効時ケース2
リロード無効時
ケース1
Webアプリケーション開始前にJSP事前コンパイルコマンドが実行されている場合,Webアプリケーション開始時にKDJE39522-Eが出力されて,Webアプリケーションの開始に失敗します。
ケース2
J2EEサーバの再起動またはWebアプリケーションの再開始後,ケース1と同じ動作になります。

表2-70 クラスファイルとJSP仕様のバージョンが異なる場合

ファイル変更のタイミングWebアプリケーションの動作
Webアプリケーション開始前ケース3
Webアプリケーション開始後リロード有効時ケース4
リロード無効時ケース5
ケース3
  • web.xmlで<load-on-startup>が指定されているJSPファイルの場合
    WAR属性ファイルまたはcosminexus.xmlの<start-notify-error>タグにtrueが指定されているとき,またはタグの指定が省略されているときは,Webアプリケーション開始時にKDJE39298-Eが出力されて,Webアプリケーションの開始に失敗します。
    cosminexus.xmlの<start-notify-error>タグにfalseが指定されているときは,Webアプリケーション開始時にKDJE39298-Eが出力されますが,Webアプリケーションの開始は成功します。ただし,リクエスト時にKDJE39298-Eが出力されて,エラーコード500(Internal Server Error)が返されます。
  • web.xmlで<load-on-startup>が指定されていないJSPファイルの場合
    初回リクエスト時にKDJE39298-Eが出力されて,エラーコード500(Internal Server Error)が返されます。
ケース4
  • 実行済みのJSPファイルの場合
    J2EEサーバの再起動またはWebアプリケーションの再開始後,ケース3と同じ動作になります。
  • 未実行のJSPファイルの場合
    ケース3の「web.xmlで<load-on-startup>が指定されていないJSPファイルの場合」と同じ動作になります。
ケース5
  • 実行済みのJSPファイルの場合
    リロード実行時にKDJE39317-Eが出力されて,JSPのリロードが失敗します(該当するリクエストからエラーコード500(Internal Server Error)が返されます)。
  • 未実行のJSPPファイルの場合
    ケース4の「未実行のJSPファイルの場合」と同じ動作になります。
    注意
    • クラスファイルだけが異なるケース(ケース3,ケース4,ケース5)は,異なるバージョンを指定してJSP事前コンパイルコマンドでコンパイルしたクラスファイルで上書きした場合を想定しています。そのため,Webアプリケーション開始時のJSP事前コンパイル機能は該当しません。
    • Webアプリケーション開始時のJSP事前コンパイル機能は,Webアプリケーション開始後にバージョン情報ファイルを更新できない(ケース2)ため,該当しません。
    • ケース1でWebアプリケーション開始時のJSP事前コンパイル機能を使用してWebアプリケーションを開始した場合は,バージョン情報ファイル自体を再作成するため,エラーにはなりません。また,Webアプリケーション開始前に,JSP事前コンパイルコマンドを実行する場合は,コマンド内でバージョンのチェックを実施しているため,コマンド実行時にバージョンの不一致を検知してエラーとなることがあります。
    • JSP事前コンパイルで個別のJSPファイルを指定してJSPコンパイルを実行する場合は,既存のバージョン情報ファイルで指定されたJSP仕様のバージョンと,コンパイル時のJSP仕様のバージョンが比較されます。その際,バージョンが異なるときはKDJE39522-Eが出力されてエラーとなります。個別のJSPファイルを指定しない場合は,バージョン情報ファイルが再作成されるため,エラーにはなりません。

(2) JSP事前コンパイル機能を使用していない場合

コンパイル時のWebアプリケーションバージョンと実行時のWebアプリケーションバージョンが異なるクラスファイルの場合,KDJE39334-Iが出力されて,JSPファイルとタグファイルが再コンパイルされます。

コンパイル時のWebアプリケーションバージョンと実行時のWebアプリケーションが異なる場合の再コンパイルの動作を次に示します。

コンパイル時のバージョン実行時のバージョン(JSP仕様のバージョン)
web.xmlのバージョンファイル種別TLDのバージョン2.22.32.42.5
2.2JSPファイル2.02.1
2.3×2.02.1
2.4JSPファイル1.2※11.2×2.1
タグファイル2.0××※2
2.5,3.0JSPファイル1.2※11.22.0×
タグファイル2.0××※2
2.12.0×
(凡例)
-:該当しない
×:再コンパイルされない
1.2:JSP1.2仕様で再コンパイルされる
2.0:JSP2.0仕様で再コンパイルされる
2.1:JSP2.1仕様で再コンパイルされる
注※1
web.xmlのバージョンが2.2の場合はWebアプリケーションバージョン2.3として動作するため,JSP1.2仕様で再コンパイルされます。
注※2
JSP2.1仕様では,タグファイルはTLDファイルに定義されるJSPバージョンによって準拠するJSP仕様が決定されます。Webアプリケーションバージョンが2.5でも,タグファイルはJSP2.0仕様で動作できるため,再コンパイルされません。