JSPは、初回の呼び出し時にWebアプリケーションコンテナによってサーブレットへと変換、コンパイルされ、実行されます。そのため、初回アクセス時は2回目以降よりも低速となります。本TIPSでは、初回実行時の低速化を解消する「jsp_precompile」パラメータを紹介します。「jsp_precompile」パラメータを利用すると、JSPを実行前にコンパイルし、初回呼び出し時の処理を高速化できます。
「jsp_precompile」パラメータは「JavaServer Pages 2.0仕様書」の「JSP.11.4 Precompilation」に定義されています。「jsp_precompile」パラメータを受け取ったWebアプリケーションコンテナは、JSPを実行せずにJSPのコンパイルのみを行います(JSP仕様準拠のWebアプリケーションコンテナは、JSP実行前コンパイルのプロトコルを実装する必要があります)。
「jsp_precompile」パラメータは、以下のいずれかの書式でHTTPリクエストを使用してWebアプリケーションコンテナに通知します。以下のどの書式を使用しても、JSPを実行せずにJSPのコンパイルのみを行います。
3行目の例のようにfoo=barという書式で任意のクエリーストリングを付与することもできますが、動作はほかの書式と同様です。
http://hostname/コンテキスト名/JSPファイル名?jsp_precompile http://hostname/コンテキスト名/JSPファイル名?jsp_precompile=true http://hostname/コンテキスト名/JSPファイル名?foo=bar&jsp_precompile=true
それでは実際にTomcat5.5を使って「jsp_precompile」パラメータの動作確認をしてみましょう。
まず、JSPファイルを作成します。ここでは、$CATALINA_HOME/webapps/jsp-examples/TestComp.jspというJSPファイルを作成します。内容は以下のとおりです。
<%@ page language="java" pageEncoding="Windows-31J" contentType="text/html; charset=Shift_JIS" %> <html> <body> <head> <title>Compile Test</title> </head> <html> <body> <h1>jsp_precompile Test</h1> </body> </html>
Tomcatを起動し、JSP作業ディレクトリの中身を確認します。JSPコンパイル後のソース・クラスファイルは作成されていません。
なお、JSPの作業ディレクトリはデフォルトの設定で$CATALINA_HOME/work/Catalinaになります。Tomcat起動時には各Webアプリケーションコンテキストのディレクトリとタグライブラリ定義のキャッシュファイルが作成されます。
まずは、jsp_precompileパラメータ付きURLでブラウザからアクセスします。
http://localhost:8080/jsp-examples/TestComp.jsp?jsp_precompile=truee
実行結果は以下のとおりです。ブラウザには何も表示されず、空のHTMLが表示されます。
TomcatのJSP作業ディレクトリにはJSPをコンパイルしたサーブレットソース・クラスが作成され、JSPの実行前にコンパイルが行われていることが確認できます。
次にパラメータなしのURLでJSPにアクセスします。
http://localhost:8080/jsp-examples/TestComp.jsp
JSPが実行され、HTMLが表示されました。
Copyright © ITmedia, Inc. All Rights Reserved.