Tomcat5.0 のインストール(Windows)

Tomcat5.0 をWindowsXPにインストールして、 自作アプリケーションを動作させるまでの手順をまとめました。

ダウンロード

Jakartaバイナリのダウンロードページから、Tomcatをダウンロードします。 幾つかバージョンがあると思いますが、安定版を使いたいので、"alpha"や"bata"の文字が付いておらず、且つ最新版の"5.0.28"を選びました。 場所ですが、"bin/jakarta-tomcat-5.0.28.exe"のような位置にあると思います。 沢山の似たようなファイルがありますが、それらは他のOS用であったり、 ファイルが正しくダウンロードされたことを確認する署名だったりするので、特に気に留めずに大丈夫です。

インストール

ダウンロードした"tomcat-5.0.28.exe"を実行すると、インストールが始まります。 特に変更せずそのまま進んで下さい。

起動

インストールが完了すると、"C:\Program Files\Apache Software Foundation\Tomcat 5.0"に、 Tomcatの関連ファイルが生成されます。 Tomcatには、サンプルのServletやJSPが入っております。 自作アプリケーションを作成する前に、まずそれらの動作を確認しておきましょう。

起動・終了には、いくつか方法があります。

  1. スタートメニュー内にあるConfigure Tomcat
  2. コントロールパネル内の「管理ツール」→「サービス」
  3. コマンドライン

3番目の方法は、Win2000ではうまくできたのですが、私のWinXP環境ではうまくいかないようです。

起動させましたら、"http://localhost:8080"にブラウザでアクセスして下さい。 Tomcatのトップページが表示されていますか? 問題がなければ、"http://localhost:8080/jsp-examples"や"http://localhost:8080/servlets-examples/"にアクセスして、 jspやservletが動くことを確認しましょう。

自作アプリケーションの作成

Tomcat 5.0のディレクトリ構成を、必要な部分中心に記述しました。

+Tomcat 5.0
 +bin
 +common
 +conf
  +Catalina
   +localhost
    -{アプリケーション名}.xml
  -server.xml
  -web.xml
 +logs
 +server
 +shared
 +webapps
  +{アプリケーション名}
   +WEB-INF
    +classes
     -{サーブレット用クラス}.class
    -web.xml
 +work

まずは、webappsディレクトリ内に、ディレクトリを作成します。 ここで付けた名前が、作成するWebアプリケーション名になります。 それから、作成したディレクトリ内に、WEB-INFというディレクトリを作成します。 さらにWEB-INFディレクトリ内に、classesというディレクトリを作成します。

それでは、さっそくアプリケーションを作成しましょう。 JavaやServletに関する説明は、別所をご覧下さい。ここでは割愛します。


[Controler.java]
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class Controler extends HttpServlet {

	public void doGet(HttpServletRequest req, HttpServletResponse res)
		throws ServletException, IOException {

		// 応答文字コードのセット
		res.setContentType("text/html; charset=Shift_JIS");
		// 出力ストリームの取得
		PrintWriter out = res.getWriter();

		// クライアント(ブラウザ)への出力
		out.println("<html lang=\"ja\">");
		out.println("<head><title>サンプル</title>");
		out.println("</head><body>");
		out.println("<h1>サンプルページ</h1>");
		out.println("</body></html>");

		// 出力ストリームを閉じる
		out.close();

	}
}

javaファイルを置く場所はどこでも良いのですが、 今回は"${TOMCAT_HOME}\webapps\lso\WEB-INF\classes"に配置しました。 コマンドラインで、コンパイルを行います。

> javac Controler.java

これで、必要なclassファイルが生成されました。

ちなみに、うちの環境では以前にTomcatの旧バージョンを入れていたため、 環境変数が古い方を示していました。 もし、同様に旧バージョンをインストールされている方は、 環境変数CLASSPATHで、"${TOMCAT_HOME}\common\lib\servlet-api.jar"が指定されているか、 確認することをお薦めいたします。

Servletは作成されましたが、そのServletへアクセスするURLをまだ、決定していません。 実は、WEB-INFディレクトリへは、"http://localhost:8080/lso/WEB-INF/classes/Controler"というように、 アクセスすることができないのです。 そこで、WEB-INFディレクトリの直下に、web.xmlというファイルを、下記の内容で作成します。


[web.xml]
<?xml version="1.0" encoding="Shift_JIS"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">

    <servlet>
        <servlet-name>Controler</servlet-name>
        <servlet-class>Controler</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>Controler</servlet-name>
        <url-pattern>/Controler</url-pattern>
    </servlet-mapping>

</web-app>

web.xmlは、DD(配布記述子)と呼ばれ、Webアプリケーションがどのようにアクセスされるかを、設定します。 "${TOMCAT_HOME}\conf\web.xml"という同様の名前のファイルがありますが、これをコピーしてそのまま使ってはいけません。 流用できる箇所がちょびっとありますが、不要なコードに悩まされる可能性の方が高いです。

さて、ここまでで、WEBアプリケーションについては、完成です。 しかし、このWEBアプリケーションに対するURLの設定が、まだされていません。 ${TOMCAT_HOME}\webappsが、http://localhost:8080/のルートになっているわけではないのです。 今回作成したWEBアプリケーション"lso"を、ブラウザからアクセスできるようにするには、 "${TOMCAT_HOME}\conf\Catalina\localhost"ディレクトリに、{WEBアプリケーション名}.xmlというファイルを、以下の内容で作成します。


[lso.xml]
<?xml version='1.0' encoding='utf-8'?>
<Context path="/lso" docBase="lso" crossContext="false" debug="0" reloadable="true">
</Context>

Tomcat4以前では、server.xml内のHostタグ内に、Context指定を行なっていました。 最初、これに気づかず、数時間もハマってしまいました。

トラブル対応

どうもうまくいかない場合、単純な問題の切り分けとして、WEBアプリケーションのトップにindex.htmlを配置して、 そのファイルが閲覧できるか確認して下さい。 もし見えない場合は、"Context Path"の設定が正しくないと思われます。 或いは、WEBアプリケーション内のweb.xmlで、コンテキストルート以下全てのURLを、 おかしなところへマッピングする記述がある可能性もあります。 また、index.htmlは見えたが、Servletは見えない場合、 WEBアプリケーション内のweb.xmlの記述(servlet-mappingなど)に問題があると思われます。

setCharaterEncodingメソッドについて

以下は余談になりますが、ServletRequestインターフェースのsetCharacterEncodingメソッド、 5.0.16以前ではGET/POSTメソッドともに使えたのですが、以降のバージョンではGETメソッドでは使えなくなっています。 server.xmlに、何やら記述すれば使えるようになるらしいのですが…。 こういう場面に出くわすと、やはり枯れた技術っていいな〜と思ってしまう今日この頃。

トラックバック