The Ja-Jakarta ProjectTomcat Servlet/JSP コンテナ

リンク

ユーザガイド

リファレンス

Tomcat開発

Tomcat5 サーブレット/JSP コンテナ

Jasper 2 JSP Engine 設定方法

Printer Friendly Version
印刷用
バージョン
目次

はじめに
設定
運用設定
Webアプリケーションのコンパイル
Jikesの使用方法

はじめに

Tomcat 5.0 では、JavaServer Pages 2.0 仕様を実装するために Jasper 2 JSP Engine を使っています。

Jasper 2 は、従来のJasperをはるかにしのぐ性能が出るように再設計されています。 一般的なコード改良に加え、次に示すような変更が行われました:

  • JSPカスタムタグ共同利用(プーリング) - JSPカスタムタグのためにインスタンス化されたJavaオブジェクトは共同利用(プール)可能となり、 再利用されるようになりました。 これはカスタムタグを利用するJSPページの性能を大幅に上げています。
  • バックグラウンドでのJSPコンパイル - コンパイル済みのJSPページに変更を加えた場合、 Jasper 2はそのページをバックグラウンドで再コンパイルすることができます。 つまり事前コンパイルされたJSPページがそのまま要求に応えることが出来ます。 新しいページのコンパイルが成功すれば古いページと置き換わります。 これは、運用サーバにおけるJSPページの可用性向上につながります。
  • インクルードされているページに変更があった場合にJSPを再コンパイル - ついにJasper 2では、ページがインクルードされている場合でもJSPファイルの更新をコンパイル時に検知し、 親JSPを再コンパイル出来るようになりました。
  • Antを使ったJSPページのコンパイル - いまやAnt 構築ツール が、 JSPのjavaソースコードコンパイルの実行に使われるようになっています。

Jasperは、サーブレットクラスである org.apache.jasper.servlet.JspServlet を使って実装されています。

[訳注: 最後に書いてあるJasperは、Jasper 2のことだと思われます。]

設定

初期状態のJasperは、Webアプリケーション開発向けに使う設定になっています。 Tomcatサーバを運用使用するためのJasperの設定に関する情報は、 運用設定の節を参照して下さい。

Jasperを実装したサーブレットは、 どのWebアプリケーションからも参照できる$CATALINA_BASE/conf/web.xml に初期パラメータを記述して設定できます。

  • checkInterval - developmentにfalse、reloadingにtrue が設定されている場合にバックグラウンドコンパイルは有効になります。 checkIntervalには、JSPページが再コンパイルが必要かを確認する間隔を秒単位で指定します。 初期値は300秒です。
  • compiler - AntがJSPページのコンパイルで使用するコンパイラです。 詳細はAnt附属の文書を見て下さい。 初期値はjavacです。
  • classdebuginfo - デバッグ情報をクラスファイルに付加するコンパイルをする時に指定します。 初期値はtrueです。
  • classpath - 生成されたサーブレットをコンパイルするときに使うクラスパスです。 指定がない場合は、実行中のWebアプリケーションを基準として動的に作られます。
  • development - 開発モード(アクセスがあるたびにJSPに変更があるかチェックする)でJasperを使う場合に指定します。 truefalseを指定できます。初期値はtrueです。
  • enablePooling - タグハンドラプーリングを有効にするか否かを決めます。 truefalseを指定できます。初期値はtrueです。
  • ieClassId - <jsp:plugin> タグを使っている時にインターネットエクスプローラに送られるclass-id 値です。 初期値はclsid:8AD9C840-044E-11D1-B3E9-00805F499D93です。
  • fork - Tomcatが動作しているのとは別のJVMでコンパイルするために、 JSPページコンパイルをAntが別プロセスで実行(fork)します。 truefalseを指定できます。初期値はtrueです。
  • javaEncoding - 生成されるJavaソースファイルのエンコーディング。 初期値はUTF8です。
  • keepgenerated - 各ページごとに生成されるJavaソースコードを削除しないで残しておく場合に指定します。 truefalseを指定できます。初期値はtrueです。
  • largefile - 生成されるサーブレットのサイズを小さくするために、 JSPページの静的コンテンツを外部データファイルに保存するよう指定します。 truefalseを指定できます。初期値はfalseです。
  • mappedfile - デバッグしやすいように、静的コンテンツを生成する際に入力行ごとに状態を出力する場合に指定します。 truefalseを指定できます。初期値はfalseです。
  • reloading - JSPが変更されたかをJasperに確認させる場合に指定します。 truefalseを指定できます。初期値はtrueです。
  • scratchdir - JSPページをコンパイルする際に一時的に使用するディレクトリを指定します。 指定しない場合は、実行中のWebアプリケーション用のworkディレクトリになります。

運用設定

運用するTomcatサーバでJasper 2を使用する場合は、 初期設定からの変更を次に示すように検討するべきです。

  • development - JSPページをバックグラウンドでコンパイルすることを有効にするためfalseとします。
  • fork - Antによって利用される内部的なJVMのjavacコンパイラはメモリーリークを起こす事で知られています。 また、javaのコンパイルが同期的に行われることがAntにとっての前提となります。 すなわち、1つのJSPページだけが1度にコンパイル可能です。 forkをtrueと設定するか値を指定しなければ(デフォルトはtrue)、 AntはJSPページを別々のJVMでコンパイルします。 これはJSPページのコンパイル同期を取り除きます。また、 Tomcat実行中のJVMによってすべてのjavacクラスがインスタンス化されてその後ガーベッジコレクトされることを予防します。 これは、Windows上のJARファイルロックと同様に、 メモリリークを含むjavacのよく知られた未解決事項への対策です。

Webアプリケーションのコンパイル

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の全てが、 構築過程の一部分としてどのように自動コンパイルされるのかを示しています。

Jikesの使用方法

JSPページのコンパイルに Jikesを使いたい場合:

  • jikesをダウンロードしインストールします。-encodingオプションをサポートするjikesを使う必要があるため、 jikes -helpを実行して-encodingが使えるように構築されたものかを確認して下さい。
  • compiler初期化パラメータへjikesを設定します。
  • -Dbuild.compiler.emacs=true属性を定義し、 CATALINA_OPTS環境変数へそれを追加しながらTomcatが起動するようにします。 この変更は、Jasperとの互換を取りながらjikesがエラーメッセージを出力するためのものです。
  • UTF8エンコーディングを使えないという内容のエラーをjikesが出力した場合は、 javaEncoding初期化パラメータへISO-8859-1を設定してみて下さい。


[訳注: この文書は小山 博史が翻訳し、 田中 ラ・マンチャ 良浩が校正しました。 日本語訳に対するコメントがあれば、report@jajakarta.orgに送って下さい。]
Copyright © 1999-2003, Apache Software Foundation