• 検索結果がありません。

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

2.5  JSP 事前コンパイル機能とコンパイル結果の保持

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

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

− − − ○ ○

タグ名 タグの説明 Servlet のバージョン

2.2 2.3 2.4 2.5 3.0 whitespaces

>

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

•「jsp_precompile」を付加したリクエストの送信

JSP 事前コンパイルを実行したアプリケーションに,クエリ文字列「jsp_precompile」,または

「jsp_precompile=true」を付加したリクエストを送信しても,JSP コンパイルは実行されません。

• JSP 事前コンパイルのコマンドの複数起動による同じ Web アプリケーションの操作

cjjspc コマンドの複数起動によって同じ Web アプリケーションに対する JSP 事前コンパイルを実行 することはできません。また,アプリケーション開始時の JSP 事前コンパイル実行時に cjjspc コマンド によって同じ Web アプリケーションに対するコンパイル処理を実行することはできません。

なお,コマンドの排他処理のため,JSP 事前コンパイル実行中には,JSP ワークディレクトリにロック ファイルが生成されます。ロックファイルは次の場所に生成されます。

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

<JSP ワークディレクトリ名>/ExecutingJspPrecompilation.lock

• JSP コンパイル結果を使用するアプリケーションに移行する場合

アーカイブ形式の J2EE アプリケーションの場合,アプリケーション開始時の JSP 事前コンパイルで生 成したコンパイル結果は,アプリケーションの停止時に削除されます。

アプリケーション開始時の JSP 事前コンパイルで生成した JSP コンパイル結果を,アプリケーションの 停止後も利用する場合の手順を,J2EE アプリケーションの形式ごとに説明します。

アーカイブ形式の J2EE アプリケーションの場合

1. アプリケーション開始時の JSP 事前コンパイルを実行する 2. アプリケーションをエクスポートする

3. リデプロイ機能などを使用して,JSP コンパイル結果を含むアプリケーションに入れ替える 展開ディレクトリ形式の J2EE アプリケーションの場合

1. cjjspc コマンドまたはアプリケーション開始時に JSP 事前コンパイルを実行する

• JSP コンパイル結果を使用しないアプリケーションに移行する場合

JSP 事前コンパイルで生成された JSP コンパイル結果を使用しない場合は,JSP ワークディレクトリを,

ディレクトリごと削除する必要があります。

JSP コンパイル結果を使用しない場合の手順を,J2EE アプリケーションの形式ごとに説明します。

アーカイブ形式の J2EE アプリケーションの場合 1. J2EE アプリケーションをエクスポートする 2. EAR ファイルを展開する

3. <Web アプリケーションのルートディレクトリ>/WEB-INF の下にある,JSP ワークディレクトリ をディレクトリごと削除する

4. EAR ファイルを作成する

5. リデプロイ機能などを使用して,J2EE アプリケーションを入れ替える 展開ディレクトリ形式の J2EE アプリケーションの場合

1. J2EE アプリケーションを停止する

Outline

関連したドキュメント