Cosminexus アプリケーションサーバ V8 機能解説 基本・開発編(Webコンテナ)
ここでは,JSP事前コンパイル実行時に実施されるチェックやJSP事前コンパイル機能を実行したJ2EEアプリケーションの動作について説明します。
JSP事前コンパイルの実行時には,web.xmlの妥当性チェック,およびJSPコンパイル結果のバージョンチェックが実施されます。
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 | |||||
| <!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から余分な空白を出力しないようにするかの設定 | − | − | − | ○ | |||
(凡例)○:検証される ×:検証されない −:サポートしていない要素
JSP事前コンパイル機能使用時,J2EEサーバはweb.xmlで指定されたWebアプリケーションのバージョンと,JSPコンパイル時のJSPのバージョンが合致するかチェックします。バージョンのチェックは次のタイミングで実施されます。
JSPから生成されるクラスファイルは,web.xmlで指定されたWebアプリケーションのバージョンに依存します。JSP事前コンパイル実行時のWebアプリケーションとバージョンが異なるWebアプリケーションで使用することはできません。このため,Webアプリケーションのバージョンを変更した際には,すべてのJSPファイルをコンパイルする必要があります。
なお,次の場合は,Webアプリケーションに含まれるすべてのJSPをコンパイルするため,JSPコンパイル結果のチェックは実施されません。
TLDファイルは,JSP事前コンパイル実行時にDTDまたはXMLスキーマに従っているかどうか検証されます。WebアプリケーションのバージョンごとにTLDファイルのチェックについて説明します。
JSP事前コンパイル機能を実行した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ファイル | ||
web.xmlでJSPファイルに<load-on-startup>を指定したWebアプリケーションのJSPファイルを事前コンパイルした場合,J2EEアプリケーション開始時には,JSPコンパイルは実施されません。JSP事前コンパイル時に生成されたクラスファイルがロードされ,jspInitメソッドが実行されます。このとき,JSPのクラスファイルまたはJSPが依存するクラスファイルがない場合は,JSPファイルのロードに失敗します。
なお,サーブレットとJSPのエラー通知の設定が有効になっている場合は,Webアプリケーション開始時に失敗します。サーブレットとJSPのエラー通知の設定については,マニュアル「Cosminexus アプリケーションサーバ アプリケーション設定操作ガイド」の「9.16 サーブレットとJSPのエラー通知の設定」を参照してください。
ここでは,JSP事前コンパイル機能での注意事項を説明します。
All Rights Reserved. Copyright (C) 2008, 2011, Hitachi, Ltd.