JSP事前コンパイル機能では,JSPファイルのコンパイル時に,JSPファイルから生成されたクラスファイルだけでなく,バージョン情報ファイルも作成されます。バージョン情報ファイルは,JSP事前コンパイル機能実行時に出力されるファイルで,JSPファイルのバージョンが記載されています。
このため,JSPのバージョンが異なる状態には,次の二つの場合があります。
- バージョン情報ファイルとWebアプリケーション実行時のWebアプリケーションバージョンに対応するJSP仕様のバージョンが異なる場合
- JSP事前コンパイル機能によってJSPファイルから生成されたクラスファイルのバージョンと,それに対応するJSP仕様のバージョンが異なる場合
それぞれの場合について,Webアプリケーションの動作を,次の表に記述します。
表2-71 バージョン情報ファイルとJSP仕様のバージョンが異なる場合
ファイル変更のタイミング | Webアプリケーションの動作 |
---|
Webアプリケーション開始前 | ケース1 |
Webアプリケーション開始後 | リロード有効時 | ケース2 |
リロード無効時 |
- ケース1
- Webアプリケーション開始前にJSP事前コンパイルコマンドが実行されている場合,Webアプリケーション開始時にKDJE39522-Eが出力されて,Webアプリケーションの開始に失敗します。
- ケース2
- J2EEサーバの再起動またはWebアプリケーションの再開始後,ケース1と同じ動作になります。
表2-72 クラスファイルと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ファイルを指定しない場合は,バージョン情報ファイルが再作成されるため,エラーにはなりません。
コンパイル時の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 | × |
- (凡例)
- -:該当しない
- ×:再コンパイルされない
- 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仕様で動作できるため,再コンパイルされません。