Cosminexus V9 アプリケーションサーバ 機能解説 基本・開発編(Webコンテナ)

[目次][用語][索引][前へ][次へ]

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.2 2.3 2.4 2.5 3.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事前コンパイル機能での注意事項を説明します。