2.20.2 JSPファイルおよびタグファイルのコンパイルと実行
Webアプリケーションのバージョン設定機能を使用する際で,JSPファイルおよびタグファイルのコンパイル時と実行時でJSP仕様のバージョンが異なる場合の実行時の動作について説明します。ここでは,JSP事前コンパイル機能を使用している場合と,使用していない場合に分けて説明します。
(1) JSP事前コンパイル機能を使用している場合
JSP事前コンパイル機能では,JSPファイルのコンパイル時に,JSPファイルから生成されたクラスファイルだけでなく,バージョン情報ファイルも作成されます。バージョン情報ファイルは,JSP事前コンパイル機能実行時に出力されるファイルで,JSPファイルのバージョンが記載されています。
このため,JSPのバージョンが異なる状態には,次の二つの場合があります。
-
バージョン情報ファイルとWebアプリケーション実行時のWebアプリケーションバージョンに対応するJSP仕様のバージョンが異なる場合
-
JSP事前コンパイル機能によってJSPファイルから生成されたクラスファイルのバージョンと,それに対応するJSP仕様のバージョンが異なる場合
それぞれの場合について,Webアプリケーションの動作を,次の表に記述します。
ファイル変更のタイミング |
Webアプリケーションの動作 |
|
---|---|---|
Webアプリケーション開始前 |
ケース1 |
|
Webアプリケーション開始後 |
リロード有効時 |
ケース2 |
リロード無効時 |
- ケース1
-
Webアプリケーション開始前にJSP事前コンパイルコマンドが実行されている場合,Webアプリケーション開始時にKDJE39522-Eが出力されて,Webアプリケーションの開始に失敗します。
- ケース2
-
J2EEサーバの再起動またはWebアプリケーションの再開始後,ケース1と同じ動作になります。
表2‒62 クラスファイルと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.2 |
2.3 |
2.4 |
2.5 |
2.2 |
JSPファイル |
− |
− |
− |
2.0 |
2.1 |
2.3 |
− |
− |
× |
2.0 |
2.1 |
|
2.4 |
JSPファイル |
− |
1.2※1 |
1.2 |
× |
2.1 |
タグファイル |
2.0 |
− |
− |
× |
×※2 |
|
2.5 |
JSPファイル |
− |
1.2※1 |
1.2 |
2.0 |
× |
タグファイル |
2.0 |
− |
− |
× |
×※2 |
|
2.1 |
− |
− |
2.0 |
× |