JSPは通常、初回リクエスト時にコンパイルを行います。このため、以下の問題があります。
初回リクエストは、2回目以降のリクエストに比べてレスポンスが返されるまでに時間がかかります。
ただし、コンパイルにかかる時間は、Java Standard Edtion 6使用時にはJava Standard Edtion 5使用時に比べて大幅に改善されています。詳細は、「3.5.6 Java Standard Edtion 6によるJSPの運用」を参照してください。
JSPに構文エラーがあった場合、初回リクエスト処理時にコンパイルエラーを検出するため、運用に支障をきたす恐れがあります。
上記の問題に対して、以下の表にあるJSP事前コンパイルを使用すると問題を防ぐことができます。
JSP事前コンパイルの方法 | コンパイルする環境 | 概要 |
---|---|---|
配備時コンパイル | 運用環境 | Webアプリケーション配備時にコンパイルを行います。 |
コンパイル結果を含むWebアプリケーションを配備 | 開発環境 | コンパイルした結果をWebアプリケーション内に格納して運用環境に配備します。 |
開発環境で生成したコンパイル結果を運用環境にコピー | 開発環境 | コンパイルした結果を運用環境のJSPコンパイル結果格納ディレクトリにコピーします。 |
各JSP事前コンパイルの方法について以下に説明します。
配備時コンパイル
JSPを含んだWebアプリケーションの配備時に、コンパイルを行う機能です。この機能を使用すると、配備時にWebアプリケーションに含まれているJSPがコンパイルされ、IJServerクラスタに配備されます。
本機能は、以下のどちらかの方法で利用できます。
Interstage Java EE管理コンソールからWebアプリケーション配備時に、「JSP をプリコンパイル」をチェックして配備を行う。
配備コマンド(asadminコマンドのdeployサブコマンド)使用時にオプション「--precompilejsp」を指定する。
生成したコンパイル結果は、デフォルトのJSPコンパイル結果格納ディレクトリに格納され、該当するIJServerクラスタの運用時に使用されます。
なお、配備したWebアプリケーションのInterstage Deployment Descriptor(sun-web.xml)で「scratchdir」を指定している場合、配備時コンパイルで生成したコンパイル結果は有効になりません。「配備時コンパイル」を使用する場合には、「scratchdir」を指定しないでください。
JSPコンパイル結果格納ディレクトリについては、「3.4.2 IJServerクラスタのファイル構成」を参照してください。
別環境でコンパイルした結果を使用する方法
別環境(開発環境)でJSP事前コンパイルした結果を、運用環境で使用します。運用環境でJSPコンパイルを行わずにWebアプリケーションを運用できます。
コンパイル結果を含むWebアプリケーションを配備
コンパイル結果をWebアプリケーション内に格納してIJServerクラスタに配備します。
以下に手順を説明します。
jspcコマンドでWebアプリケーション内のJSPをコンパイルします。
手順1.のコンパイル結果をWEB-INF/classesまたはWEB-INF/lib配下にコピーします。
sun-web.xmlのプロパティusePrecompiledをtrueにします。
Webアプリケーションとしてwarファイルにします。
手順4.で作成したwarファイルをIJServerクラスタに配備します。
手順2.と手順3.に関係する詳しい説明は、「4.2.3.7 Interstage deployment descriptorのタグの説明」を参照してください。
例
Webアプリケーション(JspSample)に含まれているJSPをコンパイルし、生成されたクラスファイルをそのままWEB-INF/classes配下に格納する場合
# jspc -webapp c:\temp\JspSample -v -compile -d c:\temp\JspSample\WEB-INF\classes
# yyyy/mm/dd hh:mm:ss org.apache.jasper.JspC processFile
# 情報: Built File: \index.jsp
#
開発環境で生成したコンパイル結果を運用環境にコピー
開発環境でコンパイルした結果を、運用環境のJSPコンパイル結果格納ディレクトリにコピーします。
デフォルトのJSPコンパイル結果格納ディレクトリに対してコピーすると、Interstage環境を破壊してしまう恐れがあります。あらかじめInterstage Deployment Descriptor(sun-web.xml)でJSPコンパイル結果格納ディレクトリを指定し、指定先のディレクトリにコンパイル結果をコピーしてください。
JSPコンパイル結果格納ディレクトリについては、「JSPコンパイル結果格納ディレクトリ」を参照してください。
以下に手順を説明します。
開発環境において、jspcコマンドでWebアプリケーション内のJSPをコンパイルします。
Webアプリケーションを運用環境に配備します。
手順1.で生成されたコンパイル結果を、Interstage Deployment Descriptor(sun-web.xml)で指定した運用環境のディレクトリにコピーします。
注意
コピーする資源の更新日時は、手順2.を行った日時より後に更新しておく必要があります。「Webアプリケーションの注意事項」の「JSPの入れ替えについて」もあわせて参照してください。
コンパイル結果は、IJServerクラスタの起動(再起動)、またはJSPのオートリロード機能により反映されます。ただし、IJServerクラスタ起動中に手順3.の前にJSPへのリクエスト、または一定間隔のJSPのオートリロード機能が動作した場合は、その処理の延長で対象のJSPのコンパイルが実行されます。
注意
JSP事前コンパイルの注意事項
JSPのコンパイル結果は、IJServerクラスタが読み書きできる必要があります。IJServerクラスタの起動ユーザを変更している場合は、JSPのコンパイル結果に対してIJServerクラスタの起動ユーザが読み書きできる権限を付加してください。
IJServerクラスタの起動ユーザについては、「3.1.7 サービス運用ユーザーのカスタマイズ」を参照してください。