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が入っております。 自作アプリケーションを作成する前に、まずそれらの動作を確認しておきましょう。
起動・終了には、いくつか方法があります。
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ファイルが生成されました。
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>
どうもうまくいかない場合、単純な問題の切り分けとして、WEBアプリケーションのトップにindex.htmlを配置して、 そのファイルが閲覧できるか確認して下さい。 もし見えない場合は、"Context Path"の設定が正しくないと思われます。 或いは、WEBアプリケーション内のweb.xmlで、コンテキストルート以下全てのURLを、 おかしなところへマッピングする記述がある可能性もあります。 また、index.htmlは見えたが、Servletは見えない場合、 WEBアプリケーション内のweb.xmlの記述(servlet-mappingなど)に問題があると思われます。
以下は余談になりますが、ServletRequestインターフェースのsetCharacterEncodingメソッド、 5.0.16以前ではGET/POSTメソッドともに使えたのですが、以降のバージョンではGETメソッドでは使えなくなっています。 server.xmlに、何やら記述すれば使えるようになるらしいのですが…。 こういう場面に出くわすと、やはり枯れた技術っていいな〜と思ってしまう今日この頃。