13. 付録

13.1. JSPの事前コンパイル方法

13.1.1. はじめに

Webアプリケーションに含まれる JSPファイルは、通常 Webブラウザからアクセスがあった時にコンパイルされます。しかし、今後 JSPファイルの変更予定が無い場合などに事前にコンパイルしておく事ができます。このような場合にここで説明する jspc を利用してください。

基本的には以下の手順で作業を行ってください。

  1. Webアプリケーションの構成を作成する。
    最初に、通常の Webアプリケーションを作成するのと同じディレクトリ構成を作ります。Webアプリケーションディレクトリ直下には WEB-INF が存在し、その配下に classes や lib がある、という Webアプリケーションの基本的なディレクトリ構成です。

  2. JSPファイルの動作を確認する。
    JSPファイルのまま Webアプリケーション(WARファイル)を実行環境に配備して JSPファイルに問題がない事を確認します。

  3. 事前コンパイルを行う。
    以下の例を参考にして jspc を使い、事前コンパイルを行います。ここで必要なら -compile オプションを指定して Javaクラスまで作成します。

  4. 不要な javaファイルを削除する。
    classファイルが生成されると javaファイルは不要です。WARファイルとしてアーカイブするディレクトリには不要ですので削除します。

  5. classファイルを WEB-INF/class もしくは WEB-INF/lib に配置する。
    classファイルを、classファイルのまま使用するならば WEB-INF/classes 配下へ、ディレクトリ構成はそのまま移動します。また、JAR としてアーカイブするならば WEB-INF/lib に配置します。

  6. マッピングを追加する。
    JSPファイルから生成された Javaクラス(Servletクラス)へアクセスするため、web.xml に servlet要素と servlet-mapping要素を記述する必要があります。必要に応じて -webinc や -webxml オプションを使って雛形を生成してください。

  7. WARファイルとしてアーカイブする。
    開発環境や JARコマンドを使って WARファイル形式にアーカイブします。

13.1.2. JSPファイルを指定してコンパイル

JSPファイルを指定してコンパイルする場合、次のように指定します。jspc は WebOTX インストールディレクトリの bin 配下にあります。以下の説明ではカレントが WebOTX インストールディレクトリにあるものとして説明します。

> bin\jspc.bat -d c:\out -uriroot c:\jsp sample01.jsp
$ bin/jspc -d /tmp/out -uriroot /tmp/jsp sample01.jsp
Caution

また、複数の JSPファイルを指定する場合は半角スペースで区切って並べます。

> bin\jspc.bat -d c:\out -uriroot c:\jsp sample01.jsp sample02.jsp
$ bin/jspc -d /tmp/out -uriroot /tmp/jsp sample01.jsp sample02.jsp

13.1.3. ディレクトリを指定してコンパイル

あるディレクトリ配下の複数の JSPファイルをまとめてコンパイルする場合、次のように指定します。

> bin\jspc.bat -webapp c:\jsp -d c:\out
$ bin/jspc -webapp /tmp/jsp -d /tmp/out

この指定で c:\jsp 配下にある JSPファイルを再帰的に検索してコンパイルされます。
また、-webapp の代わりに -uriroot を指定してもかまいません。

> bin\jspc.bat -uriroot c:\jsp -d c:\out
$ bin/jspc -uriroot /tmp/jsp -d /tmp/out

13.1.4. タグライブラリを利用する場合

JSPファイル内で以下のようにタグライブラリを参照している場合、

<%@ taglib prefix="mytag" uri="/WEB-INF/jsp2/jsp2-example-taglib.tld" %>

-webapp で指定するディレクトリ配下にタグライブラリディスクリプタが必要になります。

WEB-INF/jsp2/jsp2-example-taglib.tld

さらにタグライブラリの実装クラスも -webapp で指定したディレクトリ配下の以下に置く必要があります。

WEB-INF/classes、WEB-INF/lib のどちらか。

タグライブラリ実装クラスは -classpath オプションでそのパスを指定する事でも代用可能です。

13.1.5. Servletマッピングを出力する

-webinc オプションを指定すると、指定したファイルにサーブレットマッピングを出力します。

> bin\jspc.bat -webapp c:\jsp -d c:\out -c myclass -webinc c:\out\myclss.xml
$ bin/jspc -webapp /tmp/jsp -d /tmp/out -c myclass -webinc /tmp/out/myclss.xml

パスを省略するとカレントディレクトリに作成します。

また、-webinc の代わりに -webxml オプションを指定すると、サーブレットマッピングに加えて XML宣言なども含めた配備記述子を出力します。-webinc と比べて追加されるのは次の要素です。

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">
<!--
Automatically created by Apache Jakarta Tomcat JspC.
-->
<web-app>
  (省略)
</web-app>

13.1.6. Javaのバージョンを指定する

例えば、開発環境では Java SE 6 を使わないといけないが運用環境では Java SE 7 を利用する事が分かっていれば、-source 6(もしくは 1.6), -target 7(もしくは 1.7) と指定します。

jspc で指定できるバージョンは以下の通りです。

なお、生成したクラスファイルがどのバージョン用なのかは JDK に付属の javap コマンドを使って確認する事ができます。「javap -v <クラスファイル名>(.classは除く)」を実行すると出力される内容の中で major version が "48" であれば J2SE1.4用、"49" であれば J2SE 5.0用、"50" であれば Java SE 6用、"51" であれば Java SE 7用となります。

public final class org.apache.jsp.XXXX
 SourceFile: "XXXX.java"
 minor version: 0
 major version: 49
 Constant pool:

13.1.7. 文字化けする場合

コンパイルした Javaソースの 2byte 文字が文字化けする場合、以下の点が重要になります。

  1. JSPファイルがどの文字エンコーディングで記述されているか?
  2. JSPから生成された Javaクラスがどういう文字エンコーディングでレスポンスを出力するか?

の2つです。それぞれ JSPファイルでは以下のように指定します。

  1. pageディレクティブの pageEncoding属性
    <%@ page pageEncoding="Shift_JIS" %>

  2. pageディレクティブの contentType属性
    <%@ page contentType="text/html; charset=Shift_JIS" %>

jspc は、(a) で指定した文字エンコーディングで JSPファイルを読み込み、(b) で指定した文字エンコーディングで以下を出力します((a) が省略された場合、(b) で指定された文字エンコーディングで JSPファイルを読み込みます)。

response.setContentType("text/html; charset=Shift_JIS");

もし、既存の JSPファイルに変更を加えず文字エンコーディングを指定したい場合、-priorityJspInEncoding と -priorityJspOutEncodingEnabled を使うことで JSPファイルに指定した文字エンコーディングに関わらず強制的に指定した文字エンコーディングを使うことができます。

なお、JSPファイルに文字エンコーディングを指定していない時に特定の文字エンコーディングを指定したい場合は -defaultEncoding を指定します。これは上記 (b) 部分に適用されます。

13.1.8. Javaクラスを生成する

-compile オプションを指定する事で Javaクラスまで作成する事も可能です。標準では特に何も指定しなくても WebOTX が動作するのと同じ Java のコンパイラによりコンパイルされます。

13.1.9. JSPコンパイラを指定する

標準では WebOTX Webコンテナが持つ org.apache.jasper.compiler.AntCompiler という JSPコンパイラが使用されますが、もし、Eclipse のJDT(Java Development Tools) を使ってコンパイルしたい場合は次のようにします。

JDT(Java Development Tools) ではコンパイルにクラス(org/exlipse/jdt/compiler/xx)を利用しているため、このクラスが含まれる JAR を jspc のバッチファイル(もしくはシェルスクリプト)で指定する必要があります。

例えば、Eclipse 3.2.0 では次の JAR を指定することでコンパイルできます。
eclipse\plugins\org.eclipse.jdt.core_3.2.0.v_671.jar

これを japc.bat(or jspc)の -cp のパラメータとして指定します。

"%AS_JAVA%\bin\java" ... -cp "%AS_INSTALL%\lib\javaee.jar;...;%AS_INSTALL%\lib;org.eclipse.jdt.core_3.2.0.v_671.jar" org.apache.jasper.JspC -schemas "/schemas/" -dtds "/dtds/" %*

13.1.10. システムプロパティを指定する

jspc 実行時に特定のシステムプロパティを指定したい場合は -systemprop オプションを指定します。
書式は以下のようになっており、カンマ(,)区切りで複数指定することも可能です。

-systemprop <name>=<value>[,<name>=<value>]

13.2. Transactionサービス (バージョン5以前互換)

バージョン5以前互換のRecovery Coordination Server(RCS)につきましては、機能を提供しなくなりました。

13.3. Transactionサービス (リカバリサーバ利用時)

リカバリサーバにつきましては、機能を提供しなくなりました。