JSPCを使ったWebアプリケーションのコンパイルよりもAntを使う方が良いでしょう。
webappをあらかじめコンパイルしておくには次のようなスクリプトを使います:
 |  |  |
 |
<project name="Webapp Precompilation" default="all" basedir=".">
<target name="jspc">
<taskdef classname="org.apache.jasper.JspC" name="jasper2" >
<classpath id="jspc.classpath">
<pathelement location="${java.home}/../lib/tools.jar"/>
<fileset dir="${tomcat.home}/server/lib">
<include name="*.jar"/>
</fileset>
<fileset dir="${tomcat.home}/common/lib">
<include name="*.jar"/>
</fileset>
</classpath>
</taskdef>
<jasper2
validateXml="false"
uriroot="${webapp.path}"
webXmlFragment="${webapp.path}/WEB-INF/generated_web.xml"
outputDir="${webapp.path}/WEB-INF/src" />
</target>
<target name="compile">
<mkdir dir="${webapp.path}/WEB-INF/classes"/>
<mkdir dir="${webapp.path}/WEB-INF/lib"/>
<javac destdir="${webapp.path}/WEB-INF/classes"
optimize="off"
debug="on" failonerror="false"
srcdir="${webapp.path}/WEB-INF/src"
excludes="**/*.smap">
<classpath>
<pathelement location="${webapp.path}/WEB-INF/classes"/>
<fileset dir="${webapp.path}/WEB-INF/lib">
<include name="*.jar"/>
</fileset>
<pathelement location="${tomcat.home}/common/classes"/>
<fileset dir="${tomcat.home}/common/lib">
<include name="*.jar"/>
</fileset>
<pathelement location="${tomcat.home}/shared/classes"/>
<fileset dir="${tomcat.home}/shared/lib">
<include name="*.jar"/>
</fileset>
</classpath>
<include name="**" />
<exclude name="tags/**" />
</javac>
</target>
<target name="all" depends="jspc,compile">
</target>
</project>
|  |
 |  |  |
[訳注: 日本語環境では、<javac>要素にencoding="UTF-8"属性が必要です。
$CATALINA_BASE/conf/web.xmlでjavaEncodingをカスタマイズしている場合は、
そこで指定した値を使います。]
次に示すコマンドでスクリプトを実行できます。
(Tomcatの基準パスと事前コンパイルされるべきwebappのパスは置き換えて下さい):
 |  |  |
 |
$ANT_HOME/ant -Dtomcat.home=<$TOMCAT_HOME> -Dwebapp.path=<$WEBAPP_PATH>
|  |
 |  |  |
さらに、事前コンパイルして生成されるサーブレットの宣言と対応付けを、
Webアプリケーションの配備記述子に追加しておく必要があります。
${webapp.path}/WEB-INF/generated_web.xmlを、
${webapp.path}/WEB-INF/web.xmlファイルの正しい位置に挿入して下さい。
(マネージャアプリケーションを使って)Webアプリケーションを再起動し、
事前コンパイルされたサーブレットがきちんと動作しているかを確認して下さい。
Webアプリケーション配備記述子内に記述する適切なトークンは、
生成されたサーブレットの宣言と対応付けをAntフィルタ機能を使って自動的に挿入するのにも利用できます。
実はこれは、Tomcatに付属するwebappsの全てが、
構築過程の一部分としてどのように自動コンパイルされるのかを示しています。