2.5.4 JSP事前コンパイルの実行時の処理

ここでは,JSP事前コンパイル実行時に実施されるチェックやJSP事前コンパイル機能を実行したJ2EEアプリケーションの動作について説明します。

<この項の構成>
(1) JSP事前コンパイルで実施されるチェック
(2) JSP事前コンパイル機能を実施したアプリケーションでのJSPファイルの扱い
(3) JSP事前コンパイル機能の注意

(1) JSP事前コンパイルで実施されるチェック

JSP事前コンパイルの実行時には,web.xmlの妥当性チェック,およびJSPコンパイル結果のバージョンチェックが実施されます。

(a) web.xmlの妥当性チェック

JSP事前コンパイル機能では,コンパイル処理を実行する前に,web.xmlがDTDまたはXMLスキーマに従っているかどうかの検証が実施されます。また,JSP事前コンパイル時に参照する要素については,JSP事前コンパイルに必要な範囲で,設定値が妥当であるかどうかについても検証されます。スキーマに従っていない場合は,JSPファイルからJavaファイルを生成するJSPのトランスレーション時に,エラーが発生します。

JSP事前コンパイル実行時に検証されるweb.xmlの要素を次の表に示します。

表2-11 JSP事前コンパイル時に検証されるweb.xmlの要素

タグ名タグの説明Servletのバージョン
2.22.32.42.53.0
<!DOCTYPE>DOCTYPE宣言×××
<web-app>ルートタグ
 <servlet>サーブレットについての定義
  <jsp-file>JSPファイル名
 <taglib>タグライブラリについての定義
  <taglib-uri>タグライブラリのURI
  <taglib-location>タグライブラリ記述ファイル(TLD)の場所
 <jsp-config>JSPについての定義
  <taglib>タグライブラリについての定義
   <taglib-uri>タグライブラリのURI
   <taglib-location>タグライブラリ記述ファイル(TLD)の場所
  <jsp-property-group>指定したURLパターンに合致するJSPの設定
   <url-pattern>設置を適用するJSPのURLパターン
   <el-ignored>EL(式言語)を無視するかの設定
   <scripting-invalid>スクリプティング要素を無効にするかの設定
   <page-encoding>ページエンコーディング名
   <include-prelude>JSPのヘッダとしてインクルードするファイル
   <include-coda>JSPのフッタとしてインクルードするファイル
   <is-xml>XML形式で記述されているかの設定
   <deferred-syntax-allowed-as-literal>ELが使えない部分で#{の文字列があった場合にエラーにするかの設定
   <trim-directive-whitespaces>JSPから余分な空白を出力しないようにするかの設定

(凡例)○:検証される  ×:検証されない  -:サポートしていない要素


(b) JSPコンパイル結果のバージョンチェック

JSP事前コンパイル機能使用時,J2EEサーバはweb.xmlで指定されたWebアプリケーションのバージョンと,JSPコンパイル時のJSPのバージョンが合致するかチェックします。バージョンのチェックは次のタイミングで実施されます。

JSPから生成されるクラスファイルは,web.xmlで指定されたWebアプリケーションのバージョンに依存します。JSP事前コンパイル実行時のWebアプリケーションとバージョンが異なるWebアプリケーションで使用することはできません。このため,Webアプリケーションのバージョンを変更した際には,すべてのJSPファイルをコンパイルする必要があります。

なお,次の場合は,Webアプリケーションに含まれるすべてのJSPをコンパイルするため,JSPコンパイル結果のチェックは実施されません。

(c) TLDファイルのチェック

TLDファイルは,JSP事前コンパイル実行時にDTDまたはXMLスキーマに従っているかどうか検証されます。WebアプリケーションのバージョンごとにTLDファイルのチェックについて説明します。

(2) JSP事前コンパイル機能を実施したアプリケーションでのJSPファイルの扱い

JSP事前コンパイル機能を実行したJ2EEアプリケーションの動作について説明します。

(a) リクエスト実行時およびJ2EEアプリケーション開始時の動作

JSP事前コンパイルを実施していると,リクエスト実行時にはJSPコンパイルは実施されません。事前コンパイル時に作成したJSPのクラスファイルがロードされ,実行されます。

このとき,JSPファイルからコンパイルされたクラスファイルがない場合などには,エラーになります。JSP事前コンパイルを実施していて,ファイルがない場合のJ2EEサーバの挙動を次の表に示します。

表2-12 ファイルがない場合のJ2EEサーバの挙動(JSP事前コンパイルを実行しているとき)

存在しないファイルJ2EEサーバの挙動
JSPファイルJSPファイルJSPファイルを参照しない
クラスファイル404エラーを返す
タグファイルタグファイルタグファイルを参照しない
クラスファイル500エラーを返す(java.lang.NoClassDefFoundErrorが発生する)
静的インクルードされたファイル静的インクルードされたファイルを参照しない
TLDファイルTLDファイルを参照しない

事前コンパイルを実施してない場合でファイルがないときは,J2EEサーバは次のように動作します。

表2-13 ファイルがない場合のJ2EEサーバの挙動(JSP事前コンパイルを実行していないとき)

存在しないファイルJ2EEサーバの挙動
JSPファイルJSPファイル404エラーを返す
クラスファイルJSPファイルをコンパイルする
タグファイルタグファイル500エラーを返す(コンパイルエラー)
クラスファイルタグファイルをコンパイルする
静的インクルードされたファイル500エラーを返す(コンパイルエラー)
TLDファイル
(b) J2EEアプリケーション開始時の動作

web.xmlでJSPファイルに<load-on-startup>を指定したWebアプリケーションのJSPファイルを事前コンパイルした場合,J2EEアプリケーション開始時には,JSPコンパイルは実施されません。JSP事前コンパイル時に生成されたクラスファイルがロードされ,jspInitメソッドが実行されます。このとき,JSPのクラスファイルまたはJSPが依存するクラスファイルがない場合は,JSPファイルのロードに失敗します。

なお,サーブレットとJSPのエラー通知の設定が有効になっている場合は,Webアプリケーション開始時に失敗します。サーブレットとJSPのエラー通知の設定については,マニュアル「アプリケーションサーバ アプリケーション設定操作ガイド」の「9.16 サーブレットとJSPのエラー通知の設定」を参照してください。

(3) JSP事前コンパイル機能の注意

ここでは,JSP事前コンパイル機能での注意事項を説明します。