Hitachi

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


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

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

〈この項の構成〉

(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

3.1

<!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から余分な空白を出力しないようにするかの設定

<default-content-type>

pageディレクティブのcontentType属性のデフォルトの設定

<buffer>

pageディレクティブのbuffer属性のデフォルトの設定

<error-on-undeclared-namespace>

JSPページで未知の名前空間を使用した場合にエラーにするかどうかの設定

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

注※

11-00以前はタグを無視しましたが,11-10以降はJSPコンパイル時に検証が実施されます。そのため,11-10以降では要素の値が不正な場合,JSPのコンパイル時にエラーとなることがあります。

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

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

  • アプリケーション開始時に,JSP事前コンパイルを実施する指定をしていないとき(-jspcオプションを指定しないで,cjstartappコマンドでアプリケーションを開始したとき)

  • cjjspcコマンドを使用して,コンパイル対象外ファイルを指定してWebアプリケーション単位のJSP事前コンパイルを実行したとき

  • cjjspcコマンドを使用して,JSPファイル単位にJSP事前コンパイルを実行したとき

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

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

  • コンパイル対象外ファイルを指定しないでWebアプリケーション単位のJSP事前コンパイルを実行したとき

  • アプリケーション開始時のJSP事前コンパイルを実行したとき

    参考

    JSPコンパイル結果のバージョンチェックが実施されると,コンパイル対象のWebアプリケーションのJSPワークディレクトリに,JSPファイルのバージョン情報が記述されたバージョン情報ファイルが生成されます。バージョン情報ファイルは次の場所に生成されます。

    <Webアプリケーションのディレクトリ>/WEB-INF/<JSPワークディレクトリ名>/WEB-INF/<JSPワークディレクトリ名>/jsp_compile_info

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

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

  • Webアプリケーションのバージョンが2.4以降の場合

    デフォルトで検証が実施されます。なお,スキーマに従っていない場合,JSPファイルのトランスレーション時にエラーとなります。

  • Webアプリケーションのバージョンが2.3以前の場合

    あらかじめ,検証をするかどうか設定しておく必要があります。TLDファイルを検証する設定をしている場合に,JSP事前コンパイル実行時に検証されます。

    なお,TLDファイルの検証については,「2.5.8 実行環境での設定(J2EEサーバの設定)」を参照してください。

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