JSPは、通常初回リクエスト時にコンパイルを行います。このため、以下の問題があります。
初回リクエストは、2回目以降のリクエストに比べてレスポンスが返されるまでに時間がかかります。
JSPに構文エラーがあった場合、初回リクエスト処理時にコンパイルエラーを検出するため、運用に支障をきたす恐れがあります。
これらの問題は、JSP事前コンパイル機能を使用することにより回避することができます。
JSP事前コンパイル機能には、以下の3種類の方法が存在します。
JSP事前コンパイルの方法 | コンパイルする環境 | JSPコンパイル結果格納ディレクトリ | 概要 |
---|---|---|---|
配備時コンパイル | 運用環境 | 変更不要 | Webアプリケーション配備時にコンパイルを行います。 |
コンパイル結果を含むWebアプリケーションを配備 | 開発環境 | 変更不要 | jspcコマンドで事前コンパイルした結果をWebアプリケーション内に格納して運用環境に配備します。 |
開発環境で生成したコンパイル結果を運用環境にコピー | 開発環境 | glassfish-web.xmlのscratchdirプロパティで変更必要 | jspcコマンドで事前コンパイルした結果を運用環境のJSPコンパイル結果格納ディレクトリにコピーします。 |
JSP事前コンパイルの方法について、それぞれ説明します。
配備時コンパイル
JSPを含んだWebアプリケーションの配備時に、コンパイルを行う機能です。この機能を使用すると、配備時にWebアプリケーションに含まれているJSPがコンパイルされ、IJServerクラスタまたはInterstage Java EE 7 DASサービスに配備されます。
本機能は、以下の方法で利用できます。
配備コマンド(asadminコマンドのdeployサブコマンド)使用時にオプション「--precompilejsp」を指定する。
生成されたコンパイル結果は、デフォルトのJSPコンパイル結果格納ディレクトリに格納され、該当するIJServerクラスタまたはInterstage Java EE 7 DASサービスの運用時に使用されます。
なお、配備したWebアプリケーションのInterstage Web application deployment descriptor(glassfish-web.xml)で「scratchdir」を指定している場合、配備時コンパイルで生成したコンパイル結果は有効になりません。配備時コンパイルを使用する場合には、「scratchdir」を指定しないでください。
参照
deployサブコマンドについては、「10.1.9.1 deployサブコマンド」を参照してください。
JSPコンパイル結果格納ディレクトリについては、「2.6.9 JSPコンパイル結果格納ディレクトリ」を参照してください。
注意
ディレクトリ配備を行う場合、IJServerクラスタが停止していると、JSPの配備時コンパイルを行ってもJSP事前コンパイル結果がIJServerクラスタに反映されません。そのため、IJServerクラスタ停止時にディレクトリ配備を行う場合は「コンパイル結果を含むWebアプリケーションを配備」でJSP事前コンパイルを実施するようにしてください。
別環境でコンパイルした結果を使用する方法
別環境(開発環境)でJSP事前コンパイルした結果を、運用環境で使用します。運用環境でJSPコンパイルを行わずにWebアプリケーションを運用できます。
コンパイル結果をWebアプリケーション内に格納してIJServerクラスタまたはInterstage Java EE 7 DASサービスに配備します。
以下に手順を説明します。
jspcコマンドでWebアプリケーション内のJSPをコンパイルし、classファイルを生成します。
手順1.のコンパイル結果をWEB-INF/classesにコピー、またはjarファイルに格納してそのjarファイルをWEB-INF/lib配下にコピーします。なお、生成されたクラスファイルだけでなく、パッケージ名に該当するディレクトリも含めてください。
WEB-INF/glassfish-web.xmlのプロパティusePrecompiledをtrueにします。
Webアプリケーションとしてwarファイルにし、IJServerクラスタまたはInterstage Java EE 7 DASサービスに配備します。なお、作成したwarファイルをearファイルに含めて使用することや、warファイルにせずにディレクトリ配備することも可能です。
例
Webアプリケーション(JspSample)に含まれているJSPをコンパイルし、生成されたクラスファイルをそのままWEB-INF/classes配下に格納する場合のjspcコマンドの実行例(手順1.と手順2.を同時に実施しています)
C:\Interstage\F3FMisje7\glassfish\bin\jspc -webapp C:\temp\JspSample -v -compile -d C:\temp\JspSample\WEB-INF\classes |
/opt/FJSVisje7/glassfish/bin/jspc -webapp /tmp/JspSample -v -compile -d /tmp/JspSample/WEB-INF/classes |
開発環境でコンパイルした結果を、運用環境のJSPコンパイル結果格納ディレクトリにコピーします。
デフォルトのJSPコンパイル結果格納ディレクトリに対してコピーすると、Interstage環境を破壊してしまう恐れがあります。そのため、あらかじめInterstage Web application deployment descriptor(glassfish-web.xml)のscratchdirでJSPコンパイル結果格納ディレクトリを指定し、指定先のディレクトリにコンパイル結果をコピーしてください。格納したJSPコンパイル結果は、IJServerクラスタやInterstage Java EE 7 DASサービスの起動(再起動)時に反映されます。
以下に手順を説明します。
開発環境において、jspcコマンドでWebアプリケーション内のJSPをコンパイルし、classファイルを生成します。
WEB-INF/glassfish-web.xmlのプロパティscratchdirを指定します。
Webアプリケーションとしてwarファイルにし、IJServerクラスタまたはInterstage Java EE 7 DASサービスに配備します。なお、作成したwarファイルをearファイルに含めて使用することや、warファイルにせずにディレクトリ配備することも可能です。
手順1.で生成されたコンパイル結果を、手順2.で指定した運用環境のディレクトリにコピーします。
注意
コピーする資源の更新日時は、手順3.を行った日時より後に更新しておく必要があります。「1.4.3 Webアプリケーションの注意事項」-「JSPの入れ替えについて」もあわせて参照してください。
手順4の前にJSPへのリクエスト、または一定間隔のJSPのオートリロード機能が動作した場合は、その処理の延長で対象のJSPのコンパイルが実行されます。
参照
JSPコンパイル結果格納ディレクトリについては、「2.6.9 JSPコンパイル結果格納ディレクトリ」を参照してください。