Bits of Java (トップ)

VM   JDK と JRE
Language   オブジェクトとインスタンス   this と super   static   フィールドアクセス
IO   Serializable の実装
Swing   MetalLookAndFeel   イメージパネル
JavaBeans   プロパティ名について   XMLEncoder で保存
その他   正規表現テストアプリ   秀丸の強調表示   Ant のインストール   文字セット変換 Ant タスク   XAMPP + Tomcat

XAMPP + Tomcat を Windows XP へインストール

XAMPP 1.6.3a (Apache 2.2.4 MySQL 5.0.45 PHP 5.2.3) と Tomcat 5.5 を Windows XP にインストールする手順です。 XAMPP はインストール後すぐに Apache で SSL が使えるので Windows で Apache + SSL を使いたい場合にとても便利なパッケージとなっています。 なお、ここで紹介しているのは、あくまで開発用(ローカルでテストする為など)としての設定内容なので、実運用する場合にはパフォーマンスや特にセキュリティを考慮して設定し直してください。


XAMPP のダウンロード

Apache Friends の XAMPP のページから Windwos 版 XAMPP のダウンロードページに移動します。

XAMPP Windows 1.6.3a の ZIP 版を使いました。 (2007/08/05 現在では 1.6.3a ですが最新のバージョンをダウンロードしてください。 ミラーサイトに JAIST 北陸先端科学技術大学院大学 を使う場合はこちらのリンクになります。 http://sourceforge.net/project/downloading.php?groupname=xampp&filename=xampp-win32-1.6.3a.zip&use_mirror=jaist


XAMPP のインストール

ダウンロードした xampp-win32-1.6.3a.zip を任意のディレクトリに展開してください。 xampp というディレクトリが作成されます。 ここでは D:\pg に展開した場合を例に説明しますので D:\pg\xampp が作成されます。 以降は D:\pg\xampp というパスの部分を %XAMPP_HOME% と記述しますので、実際にインストールした xampp ディレクトリのフルパスに置き換えて解釈してください。 この時点では xampp ディレクトリの移動は可能ですが xampp というディレクトリ名を変更すると正しく動作しなくなります。

次に %XAMPP_HOME%\setup_xampp.bat を実行してセットアップ処理を行います。 Dos 窓が開き設定処理を行い、最後の部分に

##### Have fun with ApacheFriends XAMPP! #####
続行するには何かキーを押してください
というメッセージが表示されたら Enter キーを押して終了です。 これによって XAMPP に含まれているプログラムが使用する設定ファイルなどに実際のパス情報などが書き込まれます。 そのため setup_xampp.bat を実行後は xampp ディレクトリは移動できません。 (移動した場合には再度 setup_xampp.bat を実行すれば良いと思いますが、試していないのでハッキリしたことは分かりません。) XAMPP のインストールは以上です。

Zip 版のアンインストールはレジストリを使用していないので xampp ディレクトリを削除するだけです。


PHP の設定

Apache で処理される PHP の設定は %XAMPP_HOME%\apache\bin\php.ini に行います(%XAMPP_HOME%\php\php.ini ではありません)。 PHP のソースファイルを UTF-8 で記述する場合と Windows の Shift_JIS で記述する場合の2通りの設定を用意しました。 下の表は PHP のソースファイルの文字エンコーディングが UTF-8 の場合の設定です。 %XAMPP_HOME%\apache\bin\php.ini をテキストエディタで開き "php.iniの変更前" の行を探して "変更後" の内容に書き換えてください。

php.ini の変更前変更後備考
output_buffering = Off output_buffering = On output_handler を設定するので出力バッファを使うようにします。
;output_handler = output_handler = mb_output_handler デフォルトでコメントアウトされているので、先頭のセミコロンを外して mb_output_handler を設定します。 出力時にバッファ内の文字の文字エンコーディングの変換を行います。
magic_quotes_gpc = On magic_quotes_gpc = Off 必要に応じてエスケープするので Off に変更しました。 内部文字エンコーディングを UTF-8 に設定するので On に設定しても不具合はありません。 [mbstring] セクションの設定を行わない場合や mbstring.internal_encoding に SJIS や SJIS-win を設定する場合には必ず Off にする必要があります。
[mbstring] [mbstring]
mbstring.language = Japanese
mbstring.detect_order = ASCII,JIS,UTF-8,EUC-JP,SJIS-win
mbstring.internal_encoding = UTF-8
mbstring.http_input = auto
mbstring.http_output = SJIS-win
mbstring.encoding_translation = On
[mbstring] セクションはデフォルトで、すべてコメントアウトされています。 個々のオプションの意味に関しては PHP マニュアルの関数リファレンスのマルチバイト文字列関数(mbstring) を参照してください。
mbstring.detect_order の設定は auto に設定した場合の順番と同じで SJIS を SJIS-win に変更しただけです。
mbstring.substitute_character は設定していないのでデフォルトの動作となり、変換できない文字は ? に置き換えられます。

XAMPP に含まれる PHP はビルド時に --enable-zend-multibyte が有効になっていないようで PHP ソースファイルの文字エンコーディングを内部エンコーディングに変換する事はできません。 つまり上の[mbstring] セクションに

mbstring.script_encoding = SJIS-win
を設定しても動作しません。 その為、内部エンコーディング (mbstring.internal_encoding) に UTF-8 を設定した場合には PHP のソースファイルは UTF-8 で記述しなければなりません。

この設定例で出力する文字エンコーディングを Shift_JIS に設定しているのは携帯電話に対応する為なので作成するサイトが携帯からのアクセスは想定していないというのであれば SJIS-win ではなく UTF-8 を設定すればより文字化けの可能性が減ると思います。
mbstring.http_output = UTF-8
として出力する文字エンコーディングを UTF-8 に設定した場合には output_handler の設定は不用なのでコメントアウトしたままにして output_buffering には Off を設定します。

内部エンコーディング( = PHP ソースファイルの文字エンコーディング)を UTF-8 に設定した場合には %XAMPP_HOME%\htdocs\xampp\lang\jp.php は Shift_JIS で記述されているので UTF-8 で保存し直す必要があります。 また XAMPP 1.6.3a Windows 版では Xampp トップページ(イメージ)の左にあるセキュリティをクリックするとエラーが表示されます。 これは日本語用の PHP ファイルが欠けているのが原因なので こちらに置いてある jp.php.txt (Shift_JIS UTF-8)を右クリック→保存 などでダウンロードしてからファイル名を jp.php に変更して %XAMPP_HOME%\security\htdocs\lang ディレクトリに配置してください。

さらに mbstring.http_output に SJIS や SJIS-win 以外を設定している場合には %XAMPP_HOME%\htdocs\xampp\langsettings.php の

if($lang=="zh")
        {
                header("Content-Type: text/html; charset=gb2312");
        }
        else if($lang=="jp")
        {
                header("Content-Type: text/html; charset=shift-jis");
        }
shift-jis の部分を UTF-8EUC-JP など mbstring.http_output に設定している文字エンコーディングに合わせて変更しておいてください。

PHP のソースファイルを Windows の Shift_JIS (MS932) で記述したい場合には下の表のように設定します。

php.ini の変更前変更後
magic_quotes_gpc = On magic_quotes_gpc = Off
[mbstring] [mbstring]
mbstring.language = Japanese
mbstring.detect_order = ASCII,JIS,UTF-8,EUC-JP,SJIS-win
mbstring.internal_encoding = SJIS-win
mbstring.http_input = auto
mbstring.http_output = SJIS-win
mbstring.encoding_translation = On

mbstring.internal_encoding = SJIS-win
として内部エンコーディングを Windows の Shift_JIS (MS932 windows-31j) に設定しているので PHP ソースファイルも Shift_JIS で記述しなければなりません。 出力時の変換の必要がなくなるので output_handler の設定は行わず、 output_buffering も Off のままとなります。 これが一番良いように思えるのですが、 内部エンコーディングに SJIS (SJIS-win) を設定するのは 推奨されていないようです。

Shift_JIS は2バイト目が 0x5c である文字(ソ十申貼能表暴予 ほか)がある為、マルチバイトを対象としていない文字列操作関数が想定外の動作を起こす場合があります。 0x5c は1文字では \ (バックスラッシュ 日本語フォントでは円記号にマッピング)で、 PHP では \ はエスケープする為の文字となっています。

例えば magic_quotes_gpc を On にしている場合にはクライアントから送られてくる GET POST COOKIE データは自動的に addslashes 関数により ' " \ NULL 文字の4つの文字が \ を使ってエスケープされますが、この場合にブラウザのフォームに "表" という文字が入力され送信されたとします。 Shift_JIS で "表" という文字コードは 0x95 0x5c という2バイトで構成されており、 addslashes 関数が引数に "表" という文字を取った場合には1バイトずつチェックし、 2バイト目の 0x5c の前に 0x5c を挿入します。 結果的にバイト列は 0x95 0x5c 0x5c となりこれは Shift_JIS では "表\" という文字列になります。

 "表" に限らず、 Shift_JIS で2バイト目が 0x5c の文字は addslashes 関数によって直後に \ の付いた文字列に変更されてしまいます。 一般に内部エンコーディングが Shift_JIS の場合にマルチバイト文字に対応していない文字列処理関数を扱う場合には 0x5c が含まれている可能性がある事を考慮する必要があります。

またバックスラッシュによるエスケープ処理を逆手に取った SQL インジェクションもあります。 例えばクライアントから 0x95 0x27 という不正なバイト列が送信され、それを addslashes 関数によってエスケープ処理すると 0x27 (シングルクォート)の前に 0x5c が挿入され 0x95 0x5c 0x27 となり、これは Shift_JIS では 表' という2文字になり、シングルクォートが作成されてしまいます。 内部エンコーディングが EUC-JP や UTF-8 の場合にはこのような事は起きません。 PHP 5.1.3 以降ではクライアントからの不正なバイト列をチェックする為の mb_check_encoding や mb_get_info という関数が追加されています。

ローカルでテストする為にインストールする場合には内部エンコーディングは SJIS や SJIS-win でかまわないと思いますが、Windows で実運用するという場合には内部エンコーディングには UTF-8 や EUC-JP を使った方が無難かもしれません。

XAMPP 1.6.3a ではデフォルトで PHP を高速化する為の Zend Optimizer が有効になるように設定されていますが、加えて eAccelerator も使用する場合には以下の設定を行います。 必要なければスキップしてください。 (設定が正しいかどうか怪しいですがコントロールパネルを含め動作は確認しています。)

eAccelerator のコントロールパネルの control.php は XAMPP には含まれていないようなので別途入手します。 http://eaccelerator.net/ にある 0.9.5.1 のリンクをたどり、 http://bart.eaccelerator.net/source/0.9.5.1/ から eaccelerator-0.9.5.1.zip をダウンロードします。

eaccelerator-0.9.5.1.zip を展開するとその中に control.php が含まれているので %XAMPP_HOME%\htdocs\xampp ディレクトリに配置します。 control.php 以外は不用なので破棄してくださって結構です。 control.php の

/** config **/
$user = "admin";
$pw = "eAccelerator";
の部分が http://localhost/xampp/control.php を実行する際の認証内容になるので必要なら変更してください。

eAccelerator の設定は php.ini の最後にある [eAccelerator] セクションに行います。 eaccelerator.shm_size と eaccelerator.optimizer は設定を変更しています。 また eaccelerator.allowed_admin_path を設定して control.php を配置したディレクトリを設定してします。 eaccelerator.shm_size は使用する共有メモリのサイズですが 0 を指定した場合にはデフォルトの値( 32 メガバイト)が適用されます。ここでは 16 メガバイトに設定しています。 eaccelerator.optimizer の設定は 0 と 1 でどう違うのか分かりませんが、ネット上のサンプルでは 1 に設定している場合が多かったので 1 に設定しました(間違っているかもしれません)。 ウェブアプリケーション実行時にコントロールパネル (http://localhost/xampp/control.php) でメモリの使用状況を確認し、必要に応じて変更してください。 (%XAMPP_HOME% の部分は実際にインストールした xampp ディレクトリのフルパスに置き換えて記述してください)

php.ini の変更後
[eAccelerator]
extension=eaccelerator.dll
eaccelerator.shm_size = "16"
eaccelerator.cache_dir = "%XAMPP_HOME%\tmp"
eaccelerator.enable = "1"
eaccelerator.optimizer = "1"
eaccelerator.debug = "0"
eaccelerator.check_mtime = "1"
eaccelerator.filter = ""
eaccelerator.shm_max = "0"
eaccelerator.shm_ttl = "0"
eaccelerator.shm_prune_period = "0"
eaccelerator.shm_only = "0"
eaccelerator.compress = "1"
eaccelerator.compress_level = "9"
eaccelerator.keys = "shm_and_disk"
eaccelerator.sessions = "shm_and_disk"
eaccelerator.content = "shm_and_disk"
eaccelerator.allowed_admin_path = "%XAMPP_HOME%\htdocs\xampp"
;eaccelerator.admin.name =
;eaccelerator.admin.password =


MySQL の設定

%XAMPP_HOME%\mysql_start.bat や XAMPP Control Panel から MySQL を起動する場合には --defaults-file=mysql\bin\my.cnf というオプションが設定されているので %XAMPP_HOME%\mysql\bin\my.cnf が MySQL の設定ファイルとなります。 よって設定は %XAMPP_HOME%\mysql\bin\my.cnf のみに行い、 XAMPP に含まれる MySQL をコンソールから起動する場合や他のアプリケーション(例えば Eclipse など)から起動する為の設定を行う際には必ず --defaults-file=%XAMPP_HOME%\mysql\bin\my.cnf のようにオプションを加えてこの my.cnf を指定しなければなりません。 (設定時には %XAMPP_HOME% の部分は実際に XAMPP をインストールしたディレクトリのパスに置き換えてください)

MySQL に関しては文字エンコーディングの設定とトランザクションが使えるようにするための InnoDB の設定を行います。 設定ファイルは前述の %XAMPP_HOME%\mysql\bin\my.cnf をテキストエディタで編集します。 なお my.cnf は .cnf という拡張子の関係上 Windows では のようなアイコンが使われ、拡張子が非表示になっていますがファイル名は my.cnf なのでテキストエディタでファイル名から開く場合には注意してください。

%XAMPP_HOME%\mysql\bin\my.cnf の変更部分を以下に示します。

[mysqld] セクションの設定で以下の部分を

character-set-server = latin1
collation-server = latin1_general_ci
を以下のようにコメントアウトします。
#character-set-server = latin1
#collation-server = latin1_general_ci
上の部分に続けて使用する文字エンコーディングの設定を記述します。 前出の php.ini の [mbstring] セクションの mbstring.internal_encoding に UTF-8 を設定した場合と SJIS-win (あるいはSJIS)を設定した場合では内容が違ってきます。 次に示すのは mbstring.internal_encoding を SJIS-win (あるいはSJIS)とした場合の設定で、 UTF-8 を設定した場合に関しては後述します。
#character-set-server = latin1
#collation-server = latin1_general_ci
default-character-set=cp932
skip-character-set-client-handshake
CP932 (MS932 windows-31j) はウィンドウズで使われている Shift_JIS の事で、 skip-character-set-client-handshake は MySQL 5.0.13-rc 以降で使えるようになったオプションです。

[mysqldump] セクションにも以下のように default-character-set を設定します。

[mysqldump]
default-character-set=cp932
quick
max_allowed_packet=16M

[mysql] セクションにも以下のように default-character-set を設定します。

[mysql]
default-character-set=cp932
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates

ここまでの my.cnf に対する設定で cp932 という部分が3カ所ありますが、 PHP の内部エンコーディングに UTF-8 を設定した場合には3カ所とも cp932 の部分を utf8 に置き換えて記述してください。

default-character-set=utf8
なお default-character-set を utf8 に設定した場合に Windows のコマンドプロンプトから mysql を実行する際には、データベース接続後すぐに
mysql> SET NAMES cp932;
としてクライアント側の文字エンコーディングを cp932 に変更する必要があります。

次に InnoDB テーブルが使えるように設定を変更します。 トランザクションは使わないので InnoDB テーブルは使えなくてもよいという場合は以下の設定をスキップしてください。

最初に InnoDB テーブル用のデータ保存ディレクトリを作成します。 %XAMPP_HOME%\mysql\data ディレクトリに innodb というディレクトリを作成してください。 これを忘れると MySQL 起動時にエラーが発生するので以下の設定を記述する前に 作成するとよいでしょう。(データ保存ディレクトリ名は任意で innodb 以外の名前でかまいません。他の名前を使用する場合には以下に示す my.cnf に記述するデータ保存ディレクトリ名の部分をそれに合わせてください。)

次に %XAMPP_HOME%\mysql\bin\my.cnf の [mysqld] の設定で以下の部分を

skip-innodb
を以下のようにコメントアウトします。
#skip-innodb
上の部分に続けて InnoDB に関する設定を記述します。
#skip-innodb
innodb_data_file_path=ibdata1:24M:autoextend
innodb_data_home_dir=%XAMPP_HOME%/mysql/data/innodb/
innodb_log_group_home_dir=%XAMPP_HOME%/mysql/data/innodb/
innodb_log_arch_dir=%XAMPP_HOME%/mysql/data/innodb/
innodb_buffer_pool_size=16M
%XAMPP_HOME% の部分はインストールした xampp ディレクトリの絶対パスに置き換えて記述してください。 パス区切りにはスラッシュ (/) を使います。 この設定で %XAMPP_HOME%/mysql/data/innodb ディレクトリに ibdata1 というファイルが作成され、そこにデータを保存するようになります。ibdata1 の初期サイズは24メガバイトに設定していますが、足らなくなるとそのサイズは拡張されます。 また innodb ディレクトリには ib_logfile0 と ib_logfile1 という2つのログファイルも作成されます。 innodb_buffer_pool_size は InnoDB が、そのテーブルのデータやインデックスをキャッシュするために使用するメモリバッファのサイズで、この値が大きいほど、テーブル内のデータへのアクセスに必要なディスク I/O が少なくなるとマニュアルに記述されていますが、テスト用なので 16M に設定しています。 必要な場合には使用するデータベースの内容やアプリケーションで扱うデータサイズに合わせて設定を変更してください。 InnoDB の起動オプションの設定に関しては MySQL のリファレンスマニュアル 4.0(日本語) または 5.0(英語) を参考にしてください。

以上で InnoDB テーブルが使えるようになりますが、ここで行った設定だけではデフォルトのテーブルは MyISAM のままなので、 InnoDB テーブルを使う場合にはテーブル生成時に

CREATE TABLE CUSTOMER (A INT, B CHAR (20)) ENGINE = InnoDB;
のように ENGINE = InnoDB を付ける必要があります。


phpMyAdmin で root パスワードの設定

phpMyAdmin を使って root のパスワードの設定を行います。 不用な場合はスキップしてください。 phpMyAdmin を操作する為には前述の PHP と MySQL への設定が済んでいる必要があります。

phpMyAdmin 2.10 からはバージョンアップの際のコード変更により PHP の設定で

output_handler = mb_output_handler
のように出力時にバッファ内の文字の文字エンコーディングの変換を行う設定にしている場合にトップページの左側のフレームが文字化けを起こす場合があります。 (mb_output_handler の設定に加え mbstring.http_output を UTF-8 以外に設定している場合に発生するようです)

これを避ける為に行儀の悪い方法ですが %XAMPP_HOME%\phpMyAdmin\navigation.php のコードに直接使用する文字エンコーディングを書き込んでしまいます。 (ハードコードが許せない方は ini_get('output_handler') でチェックして mb_output_handler が設定されている場合に ini_get('mbstring.http_output') の値に合わせてレスポンスヘッダや HTML の meta 要素の Content-Type の文字エンコーディングを適切に出力するコードを書くと良いと思います)

navigation.php の最初の方にある以下の部分に

function PMA_exitNavigationFrame()
{
    echo '</body></html>';

    /**
     * Close MySQL connections
     */
    if (isset($GLOBALS['controllink']) && $GLOBALS['controllink']) {
        @PMA_DBI_close($GLOBALS['controllink']);
    }
    if (isset($GLOBALS['userlink']) && $GLOBALS['userlink']) {
        @PMA_DBI_close($GLOBALS['userlink']);
    }

    /**
     * Sends bufferized data
     */
    PMA_outBufferPost();

    exit();
}

HTTP の Response ヘッダを設定する赤い部分のコードを挿入します。 PHP の設定で出力文字エンコーディング (mbstring.http_output) に指定した文字エンコーディングに合わせて Shift_JIS, UTF-8, EUC-JP などを charset= の右の部分に記述します。

function PMA_exitNavigationFrame()
{
    echo '</body></html>';

    /**
     * Close MySQL connections
     */
    if (isset($GLOBALS['controllink']) && $GLOBALS['controllink']) {
        @PMA_DBI_close($GLOBALS['controllink']);
    }
    if (isset($GLOBALS['userlink']) && $GLOBALS['userlink']) {
        @PMA_DBI_close($GLOBALS['userlink']);
    }

    header('Content-Type: text/html; charset=Shift_JIS');

    /**
     * Sends bufferized data
     */
    PMA_outBufferPost();

    exit();
}

念のため HTML の meta 要素の Content-Type の部分も変更します。 navigation.php の125行目あたりに以下のコードがあります。

<head>
    <link rel="icon" href="./favicon.ico" type="image/x-icon" />
    <link rel="shortcut icon" href="./favicon.ico" type="image/x-icon" />
    <title>phpMyAdmin</title>
    <meta http-equiv="Content-Type"
        content="text/html; charset=<?php echo $GLOBALS['charset']; ?>" />

こちらも PHP の設定で出力文字エンコーディング (mbstring.http_output) に指定した文字エンコーディングに合わせて Shift_JIS, UTF-8, EUC-JP などをcahrset= の右の赤い部分に記述します。

<head>
    <link rel="icon" href="./favicon.ico" type="image/x-icon" />
    <link rel="shortcut icon" href="./favicon.ico" type="image/x-icon" />
    <title>phpMyAdmin</title>
    <meta http-equiv="Content-Type"
        content="text/html; charset=Shift_JIS" />

以上で phpMyAdmin でも文字化けしなくなるはずです。 なお PHP の設定で output_handler の部分をコメントアウトしたままで設定を行っていない場合には navigation.php を修正する必要はありません。 その場合には phpMyAdmin のトップページの左フレームはトップページ右側に "MySQL の文字セット"として表示されている文字エンコーディング(おそらく character_set_system の値である UTF-8)で出力されるようです。 (Response ヘッダの Content-Type に常にこの "MySQL の文字セット" が設定される為に mbstring.http_output の設定がこの文字エンコーディングと違う場合に左フレームの文字化けが発生するようです。よって mbstring.http_output の文字エンコーディングと"MySQL の文字セット" が同じ場合には上記 navigation.php の修正を行わなくても文字化けは発生しません)

それでは phpMyAdmin で root のパスワードの設定を行います。 まず %XAMPP_HOME%\apache_start.bat で Apache を起動し、続いて %XAMPP_HOME%\mysql_start.bat で MySQLサーバを起動します。 最初に MySQL サーバを起動した時には InnoDB が使用するファイルを作成するので少し時間が掛かるかもしれません。 Dos 窓に出力されるメッセージの最後の行に

Version: '5.0.45-community-nt'  socket: ''  port: 3306  MySQL Community Edition(GPL)
のように表示されれば起動は完了しています。 次にブラウザから http://localhost/xampp/ にアクセスしてください。 下のページが表示されたら日本語をクリックします。

ここまでの設定に間違いがなければ下のページが文字化けせずに表示されるはずです。 文字化けした場合には jp.php の文字コードと PHP の内部エンコーディングが合っているか確認してみてください。 左側の Tools の phpMyAdmin をクリックします。

設定に問題がなければ phpMyAdmin が文字化けせずに表示されるはずです。 特権をクリックします。

ここで root のパスワードの設定を行います。 pma はシャットダウン用なので変更しないでください。 root の一番右にあるペンを持った人のアイコンをクリックします。

表示される "ユーザー 'root'@'localhost' : 特権を修正" ページの下の方にある "パスワードを変更する" の "パスワード" のラジオボタンをクリックし、パスワードと再入力のテキストフィールドにパスワードを入力してから、すぐ下の実行ボタンをクリックします。 パスワードは phpMyAdmin の設定ファイルに記述するのでメモなどして忘れないようにしてください。

パスワードの変更が終了し、下のイメージのように "特権を修正" と表示されます。 この時点でパスワードが有効になり、 phpMyAdmin を操作できなくなるので一度ブラウザを閉じ、 %XAMPP_HOME%\apache_stop.bat と %XAMPP_HOME%\mysql_stop.bat で Apache と MySQLサーバを停止します。

%XAMPP_HOME%\phpMyAdmin\config.inc.php をテキストエディタなどで開いて下の部分(実際の設定ファイルには行の右側にコメントが記述されていますが省略しています)で

$cfg['Servers'][$i]['auth_type']     = 'config';
$cfg['Servers'][$i]['user']          = 'root';
$cfg['Servers'][$i]['password']      = '';
パスワードを設定します。下の password の部分には phpMyAdmin で実際に設定したパスワードを記述します。
$cfg['Servers'][$i]['auth_type']     = 'config';
$cfg['Servers'][$i]['user']          = 'root';
$cfg['Servers'][$i]['password']      = 'password';

以上で root のパスワードの設定は終わりです。 以降は Apache と MySQL が起動している状態で http://localhost/phpmyadmin/ にアクセスすると config.inc.php の設定内容をもとに root として MySQL に接続します。 MySQL のユーザの作成は root のパスワードの設定を行った時と同じ特権のページで "ユーザーを追加する" をクリックして表示される画面で行えます。


Apache と MySQL サーバの起動

Apache の起動と終了は %XAMPP_HOME%\apache_start.bat と %XAMPP_HOME%\apache_stop.bat で行います。
MySQL サーバの場合は %XAMPP_HOME%\mysql_start.bat と %XAMPP_HOME%\mysql_stop.bat で行います。
%XAMPP_HOME%\xampp_start.exe は Apache と MySQL サーバの両方を起動し、 %XAMPP_HOME%\xampp_stop.exe で両方を終了します。

%XAMPP_HOME%\xampp-control.exe は XAMPP コントロールパネルを起動します。

Svc というチェックボックスにチェックするとサービスとして登録され、チェックを外す事でサービスから削除されます。 MySQL の右の Admin ボタンを押すと WinMySQLAdmin が起動します。 WinMySQLAdmin は C:\Windows\my.ini を作成しますが、この my.ini はここまで紹介した MySQL の起動方法では読み込まれません。 個人的には XAMPP の MySQL では、設定は %XAMPP_HOME%\mysql\bin\my.cnf に行い、データベースの操作などは phpMyAdmin で行うので WinMySQLAdmin は使用していません。 環境によって違うと思いますが私の PC では XAMPP 1.6.3a に含まれる XAMPP コントロールパネルは起動しているだけで CPU 使用率が 16% ぐらいになります。


Tomcat のダウンロード

Windows XP に Tomcat5.5 をインストールしますが JDK 1.5 (以降)がインストールされているものとして話しを進めます。 ここでは Tomcat 5.5.17 をインストールしますが 5.5 であれば同じようにインストールできると思いますので最新版をインストールするようにしてください。 Tomcat をインストールしたディレクトリを %TOMCAT_HOME% と記述しますので実際にインストールしたディレクトリに置き換えてください。 またファイル名、ディレクトリ名などのバージョン番号の部分は実際にインストールした Tomcat のバージョン番号に置き換えて解釈してください。

Apache Tomcat のサイトから Tomcat 5.x ダウンロードのページに移動します。

Tomcat 5.x のダウンロードページで Tomcat 本体をインストールする為のファイルへのリンクはページ中程の Binary Distributions の Core に用意されている3つのどれかです。 zip 版 と tar.gz 版は展開すれば中身は同じで、インストールは展開するだけとなります。 Windows Executable (5.5.23 現在 Windows Service Installer というリンクになっています)を選んだ場合にはインストーラによるインストールとなり、 Tomcat はサービスとしてインストールされます。 Tomcat 本体の他にアドミニツールを使えるようにする為に Core の3つ下の項目の Administration Web Application の zip 版 あるいは tar.gz 版もダウンロードしておいてください。



zip 又は tar.gz ファイルによる Tomcat のインストール

zip 版又は tar.gz 版によるインストールは展開するだけです。 アンインストールもレジストリなどは使っていないのでディレクトリごと削除するだけです。

展開すると apache-tomcat-5.5.17 というディレクトリが作成されます。 Tomcat の起動は %TOMCAT_HOME%\bin\startup.bat で行い、終了は %TOMCAT_HOME%\bin\shutdown.bat で行います。 いつでも apache-tomcat-5.5.17 というディレクトリ名を変更したり、移動したりできます。 (もちろん起動や終了用のショートカットアイコンなどを作成している場合には、それらを変更しなければなりませんが)

Zip 版でインストールした場合には admin ツールやマネージメントアプリケーションにアクセスする為のユーザを手動で設定します。 %TOMCAT_HOME%\conf\tomcat-users.xml をテキストエディタなどで開いて編集してください。 デフォルトでは以下のようになっていると思います。(user の順番の違いに意味はありません)
<tomcat-users>
  <user name="tomcat" password="tomcat" roles="tomcat" />
  <user name="role1"  password="tomcat" roles="role1"  />
  <user name="both"   password="tomcat" roles="tomcat,role1" />
</tomcat-users>

あるいは Tomcat が自動的に編集して以下のようになっているかもしれません。
<tomcat-users>
  <role rolename="tomcat"/>
  <role rolename="role1"/>
  <user username="tomcat" password="tomcat" roles="tomcat"/>
  <user username="both" password="tomcat" roles="tomcat,role1"/>
  <user username="role1" password="tomcat" roles="role1"/>
</tomcat-users>

どちらの場合も下のように </tomcat-users> のすぐ上にでも admin と manager のロールを兼ねたユーザを設定します。
admin や manager に対応する role 要素は Tomcat が自動的に編集して付け加えるので設定する必要はありません。
  <user username="role1" password="tomcat" roles="role1"/>
  <user name="admin" password="chikichikipg" roles="admin,manager"/>
</tomcat-users>

ユーザ名に admin とパスワードに chikichikipg を設定しています。 このユーザ名とパスワードを admin ツールや manager アプリにアクセスする際の認証で使用します。


exe ファイルによる Tomcat のインストール

Windows インストーラ版によるインストールはダウンロードした apache-tomcat-5.5.17.exe ダブルクリックなどで実行します。

次の画面に進みライセンスに同意します。

Normal タイプでインストールする場合は以下のような内容になります。 Service にチェックを入っていると OS 起動時に Tomcat がサービスとして起動されます。 チェックを入っていない場合でもサービスとしてインストールされますが、起動は手動になります。 Native にチェックが入っていると Windows 用に用意された DLL を使う事により、パフォーマンスが良くなるそうですが、実運用する環境も Windows で Native にチェックを入れてインストールした Tomcat を使用する場合を除いて、特に必要性がなければチェックしないでよいと思います。 SSL のテストで使うので Example と Webapps にはチェックを入れておいてください。 ドロップダウンリストから Full を選んだ場合にはデフォルトですべてにチェックが入っています。

インストールするディレクトリを入力します。 デフォルトのままでも良いですが、長い名前や空白がファイル名に含まれるのがイヤな場合は C:\Tomcat5.5 などとすると良と思います。

次にデフォルトのポート番号と admin と manager のロールを持つユーザの設定を入力します。 ポート番号は 8080 のままにして、ユーザ名も admin のままで良いと思います。 パスワードを入力して次に進みます。 ここに設定したユーザ名とパスワードは %TOMCAT_HOME%\conf\tomcat-users.xml に自動的に追加され、 admin ツールアプリや Managerアプリなどにアクセスする際の認証に使われます。 admin や manager のロールを持つユーザのユーザ名やパスワードを忘れた場合には %TOMCAT_HOME%\conf\tomcat-users.xml を参照してください。

次に使用する Java VM を指定します。 デフォルトで JRE をインストールしたディレクトリが表示されているのでそのまま Install ボタンを押します。 (JDK に含まれている jre ディレクトリを指定すると server 用の JVM が使用されるので、もしかするとその方がパフォーマンスが良くなるかもしれませんが未確認です。)

インストールは終了です。 Finish ボタンを押すと Tomcat が起動し、タスクトレイに が表示されそのアイコンから Tomcat を止めたり、サービスに関する設定画面を表示したりできます。


Admin ツールのインストール

apache-tomcat-5.5.17-admin.zip 又は apache-tomcat-5.5.17-admin.tar.gz をダウンロードしていない場合には前述の内容をもとにダウンロードしてください。 展開すると apache-tomcat-5.5.17 ディレクトリが作成されます。 その中の conf ディレクトリと server ディレクトリをコピーして Tomcat をインストールしたディレクトリに貼り付けてください。

上のような確認のダイアログが表示されたら "すべて上書き"ボタンを押してください。 実際に上書きされるファイルはありません。 このコピーで admin ツールのインストールは終了です。

Tomcat を起動して http://localhost:8080/ で表示されるデフォルトのトップページの左上の Administration の Tomcat Administration や Tomcat Manager のリンクで adminツールアプリケーションや マネージャアプリケーションにアクセスできます。 これらの管理ツールはアクセスの際に認証が行われるので %TOMCAT_HOME%\conf\tomcat-users.xml に設定されているロールが admin や manager となっているユーザ名とパスワードを入力してください。


Tomcat の SSL の設定

Tomcat 単体でも SSL が使えるように設定します。 コマンドプロンプトを開き %TOMCAT_HOME%\conf ディレクトリに移動してください。 以下のコマンドを実行して privatecert というキーストアファイルを tomcat というエイリアスで作成します。

keytool -genkey -keyalg RSA -alias tomcat -keystore privatecert
表示される内容に従ってパスワードや組織名などを入力していきます。 全体は以下のようになります。

D:\pg\java\tomcat\servers\tomcat5.5.17\conf>keytool -genkey -keyalg RSA -alias tomcat -keystore privatecert
キーストアのパスワードを入力してください:  chikichikicode
姓名を入力してください。
  [Unknown]:  private CA
組織単位名を入力してください。
  [Unknown]:
組織名を入力してください。
  [Unknown]:
都市名または地域名を入力してください。
  [Unknown]:
州名または地方名を入力してください。
  [Unknown]:
この単位に該当する 2 文字の国番号を入力してください。
  [Unknown]:
CN=private CA, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown でよろしいですか?
  [no]:  y

<tomcat> の鍵パスワードを入力してください。
        (キーストアのパスワードと同じ場合は RETURN を押してください):

D:\pg\java\tomcat\servers\tomcat5.5.17\conf>

最初のキーストアのパスワードは入力する必要があります。 他は入力しなくてもエラーにはなりません。 以下の部分では
CN=private CA, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown でよろしいですか?
  [no]:
Y キーを入力して Enter キーを押します。 最後の <エイリアス名> の鍵パスワードは何も入力せずに Enter キーを押します。 これで %TOMCAT_HOME%\conf に privatecert が作成されます。

次に %TOMCAT_HOME%\conf\server.xml をテキストエディタなどで編集します。 コメント部分でも日本語は入力しないでください。
<Service name="Catalina"> 要素にネストされている SSL の設定部分(コメントアウトされています)を探し、その直後にでも以下のように設定を記述してください。 keystorePass 属性にはキーストアのパスワードを記述します。

<!-- Define a SSL HTTP/1.1 Connector on port 8443 -->
    <!--
    <Connector port="8443" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" disableUploadTimeout="true"
               acceptCount="100" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" />
    -->
    <Connector port="8443" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" disableUploadTimeout="true"
               acceptCount="100" scheme="https" secure="true"
               keystoreFile="conf/privatecert"
               keystorePass="chikichikicode"
               clientAuth="false" sslProtocol="TLS" />

以上の設定で SSL が使えるようになるので Tomcat 付属の JSP サンプルの Web アプリケーションを使ってテストします。 %TOMCAT_HOME%\webapps\jsp-examples\WEB-INF\web.xml をテキストエディタで開き、Example Security Constraint という内容の display-name 要素が設定されている<security-constraint>要素(ここでは中身は省略して表示しています)を探し、その後に続けて以下のような設定を行ってください。

    <security-constraint>
      <display-name>Example Security Constraint</display-name>
              省略
    </security-constraint>

    <!-- SSL Test -->
    <security-constraint>
      <web-resource-collection>
        <web-resource-name>SSL Test Area</web-resource-name>
        <url-pattern>/jsp2/simpletag/hello.jsp</url-pattern>
        <http-method>GET</http-method>
      </web-resource-collection>
      <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
      </user-data-constraint>
    </security-constraint>

この設定によって /jsp-examples/jsp2/simpletag/hello.jsp に対するアクセス (GET) は SSL で行われる事になります。 Tomcat を起動し、ブラウザから http://localhost:8080/jsp-examples/ にアクセスして表示される JSP Samples のページの中程にある Hello World Tag の 右の Execute というリンクをクリックします。

https://localhost:8443/jsp-examples/jsp2/simpletag/hello.jsp にリダイレクトされ、 SSL 証明書がプライベート認証局による署名なので、ブラウザが証明書に関する警告のメッセージを表示すると思いますが、接続を許可すると SSL 通信が確立されてページが表示されます。

上記設定で WTP を使っている Eclipse から Tomcat を起動する際に
致命的: エンドポイントを初期化中のエラーです
java.io.FileNotFoundException: %WORKSPACE%\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\conf\privatecert (指定されたファイルが見つかりません。)
のような例外が発生した場合には(%WORKSPACE% の部分は設定しているワークスペースディレクトリの実際のパスが表示されます)%TOMCAT_HOME%\conf\privatecert をエラーメッセージの conf ディレクトリにコピーしてください。


Tomcat と Apache の連携

Apache と Tomcat の連携は Apache 2.2 から AJP1.3 プロトコル をサポートしたモジュールが用意されているのでこれを静的、または LoadModule で動的に組み込めば、後は設定ファイルに Tomcat に転送するリクエストの設定を行うだけです。 Apache と Tomcat は AJP1.3 プロトコルで通信するので AJP 1.3 コネクタがサポートされていれば Tomcat のバージョンは何でもかまわないと思われます。

テスト用なので 8080 ポートにリクエストした場合にはすべて Tomcat が処理し、 Apache と Tomcat 両方とも起動している場合に 80 ポートにアクセスした場合には
/jsp-examples
/servlets-examples
/tomcat-docs
以下への静的なリソースへのリクエストは Apache が処理し、動的なリソース(JSP とサーブレット)へのリクエストは Tomcat に転送して処理するように設定します。

まず %XAMPP_HOME%\apache\conf\extra ディレクトリに以下の内容で httpd-tomcat.conf というテキストファイルを作成します。

#
# Tomcat settings
#


############ tomcat-docs Web Application ############
Alias /tomcat-docs "D:/pg/java/tomcat/servers/tomcat5.5.17/webapps/tomcat-docs"

<Directory "D:/pg/java/tomcat/servers/tomcat5.5.17/webapps/tomcat-docs">
    Options Indexes
    AllowOverride None
    Order Allow,Deny
    Allow from all
</Directory>


############ jsp-examples Web Application ############
Alias /jsp-examples "D:/pg/java/tomcat/servers/tomcat5.5.17/webapps/jsp-examples"

<Directory "D:/pg/java/tomcat/servers/tomcat5.5.17/webapps/jsp-examples">
    Options Indexes
    AllowOverride None
    Order Allow,Deny
    Allow from all
</Directory>

RewriteEngine  on
RewriteRule ^/jsp-examples/(.+)\.(jspx|jsp)$ ajp://localhost:8009/jsp-examples/$1.$2 [P]


############ servlets-examples Web Application ############
Alias /servlets-examples "D:/pg/java/tomcat/servers/tomcat5.5.17/webapps/servlets-examples"

<Directory "D:/pg/java/tomcat/servers/tomcat5.5.17/webapps/servlets-examples">
    Options Indexes
    AllowOverride None
    Order Allow,Deny
    Allow from all
</Directory>

<Location /servlets-examples/servlet/>
    ProxyPass ajp://localhost:8009/servlets-examples/servlet/
</Location>


############ deny WEB-INF directory ############
<Directory "D:/pg/java/tomcat/servers/tomcat5.5.17/webapps/*/WEB-INF">
    AllowOverride None
    Order Allow,Deny
    Deny from all
</Directory>

D:/pg/java/tomcat/servers/tomcat5.5.17 の部分は Tomcat をインストールしたディレクトリに置き換えて記述してください。
次に %XAMPP_HOME%\apache\conf\extra\httpd-ssl.conf をテキストエディタで開き

省略
<VirtualHost _default_:443>

        省略

    RewriteEngine  on
    RewriteRule ^/jsp-examples/(.+)\.(jspx|jsp)$ ajp://localhost:8009/jsp-examples/$1.$2 [P]
</VirtualHost>

上のように _default_:443 の VirtualHost セクションの末尾に

    RewriteEngine  on
    RewriteRule ^/jsp-examples/(.+)\.(jspx|jsp)$ ajp://localhost:8009/jsp-examples/$1.$2 [P]
の2行を加えます。 jsp-examples アプリケーションの場合は JSP への URL が分散している為に mod_rewrite による URL Rewriting を行っていますが Tomcat の設定ファイル (web.xml) における JSP と URL 間のマッピングの設定 (servlet-mapping) で JSP 専用の URL を決めて、その配下にすべての JSP をマッピングする事で servlets-examples アプリケーションのように mod_rewrite を使わずに済むようになります。 mod_rewrite による URL Rewriting を行わないのであれば SSL を使う場合でも _default_:443 への設定は不用で httpd-tomcat.conf への ProxyPass ディレクティブの設定は SSL 通信時にも適用されます。

次に %XAMPP_HOME%\apache\conf\httpd.conf をテキストエディタで開き、コメントアウトされている以下の行を探してください。

#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
# をはずして設定を有効にします。
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
同様に下の行を探して
#LoadModule rewrite_module modules/mod_rewrite.so
# をはずして設定を有効にします。
LoadModule rewrite_module modules/mod_rewrite.so
最後に設定の末尾の方で conf/extra ディレクトリの設定ファイルを Include ディレクティブでインクルードしている部分があるので、以下のように httpd-tomcat.conf もインクルードするように設定します(青い部分を記述してください)。
# Secure (SSL/TLS) connections
Include conf/extra/httpd-ssl.conf

# Tomcat setting
Include conf/extra/httpd-tomcat.conf
Apache 側の設定は以上です。

Tomcat 側の設定は1カ所だけです。 %TOMCAT_HOME%\conf\server.xml をテキストエディタで開き <Service name="Catalina"> 要素にネストされている AJP の設定を探して redirectPort 属性の値を 8443 から 443 に変更します。 以下のようになります。


<!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="8009"
               enableLookups="false" redirectPort="443" protocol="AJP/1.3" />

redirectPort は設定ファイル (web.xml) において SSL による接続を指定されているリソースに対するリクエストが SSL 通信を行わないコネクタに届いた場合にリダイレクトさせるポート番号を設定します。 リダイレクト先に指定したポートを使っているコネクタは SSL に対応している必要があります。 デフォルトの 8080 ポートを使っているコネクタは SSL 通信を行うリダイレクト先のポートに 8443 ポートを指定していますが、 8009 ポートは Apache から転送されてきたリクエストを扱っているので Apache が SSL 通信を行えるのであれば 443 ポートを指定して Apache に SSL 通信の確立を任せます。 (Apache で SSL が使えない場合には 8443 で Tomcat に処理させます)

以上で Apache と Tomcat の連携の設定はおわりです。
http://localhost:8080/
の場合は Apache を通さずに Tomcat につながり
http://localhost/tomcat-docs/
http://localhost/jsp-examples/
http://localhost/servlets-examples/
以下へのリクエストは JSP や サーブレットは Apache から Tomcat へ転送されて処理され、 HTML などの静的リソースは Apache が処理する事になります。 どちらでもテストしやすいようにこのような設定にしていますが、 Tomcat を単体では使わないというのであれば %TOMCAT_HOME%\conf\server.xml の 8080 ポートと 8443 ポートのコネクタの設定部分をコメントアウトします。 Apache の SSL のテストは Tomcat のインストールの際の動作テストでも使った
http://localhost/jsp-examples/jsp2/simpletag/hello.jsp
で行えます。(httpd-ssl.conf への RewriteEngine と RewriteRule ディレクティブの設定を行っていない場合には JSP ソースが表示されてしまいます。 WEB-INF 以下に JSP を配置するようにすればこのような事は起きなくなります。)