Tomcat

Tomcatって?

TomcatはWEBアプリケーションサーバです。
TomcatはServletAPIのReference Implementationです。

WEBアプリケーションサーバ

私、昔WEBサーバーとアプリケーションサーバーの違いってのが、 よくわからなかったんですが、みなさんご存知ですか? WEBサーバーっていうのは静的なHTMLや簡単なCGIを動作させるサーバーのこと。 対してアプリケーションサーバーとは、その他の機能満載のサーバーのこと。 その他の機能っていうのはトランザクションやセキュリティーの機能とか。
Javaの世界でアプリケーションサーバーと言えば、 J2EE対応のWEBアプリケーションサーバーのことで、 サーブレットコンテナ、EJBコンテナを含んだフルセットのことが多いです。 TomcatもWEBアプリケーションサーバーと呼ばれますが、 EJBコンテナは含んでいないのであしからず。

Reference Implementation

"りふぁれんすいんぷりめんてーしょん" というのは直訳すると参考実装。 SUNやJCPの作った仕様が実際に実現可能かどうか、 実装して試してみたものらしいです。

3分でできるWebアプリケーション作成

今更ここでTomcatについて、面白いネタもないので、 こんなのに挑戦してみました。 3分以内にTOMCATをダウンロード、設定し、 Webアプリケーションを作って、JSPやサーブレットを動かす。 回線はADSLかFTTHで挑戦してくださいませ。

ダウンロードと環境設定
Tomcatのバイナリの最新版をダウンロードしましょう。 ちなみにexeはウィンドウズのインストーラー付、 LEはJDK1.4用の軽い版(xml系のjar含まない)です。 なんかイヤだったら普通のzipでOKっす。 環境変数はJAVA_HOMEだけは必ず必要なので、 してなかったらJDKのパスを指定してくださいませ。 インストール(zipは展開)してください。

Webアプリケーションの作成
%TOMCAT_HOME%/webapps/の
ROOTをコピーして貼り付け、名前をtestにします。

JSPの作成実行
%TOMCAT_HOME%/webapps/test/hoge.jspを新規作成。 中身はこれ
<html>
<body>
<%="hoge" %>
</body>
</html>
ブラウザでhttp://localhost:8080/test/hoge.jspにアクセス。

サーブレットの作成実行
%TOMCAT_HOME%/webapps/test/WEB-INF/classes/HogeServlet.javaを新規作成。
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class HogeServlet extends HttpServlet{
	public void doGet(HttpServletRequest req, HttpServletResponse res)
		throws ServletException, IOException{
		res.getWriter().println("hoge");
	}
}
コンパイル(javac -cp %TOMCAT_HOME%/common/lib/servlet.jar HogeServlet.jar)して、 ブラウザでhttp://localhost:8080/test/servlet/HogeServlet.jspにアクセス。

ここまで3分で出来れば、WEBタイピングマスター1段相当です。
さすがにつらいか。

Webアプリケーションのリロード

クラスファイル、設定ファイルを更新したときに、サーバーを再起動するのは時間がかかります。 該当Webアプリケーションだけリロードしましょう。 ここではmanagerアプリケーションというのを使います。 使う場合にユーザー設定が必要なので以下の設定をします。

%TOMCAT_HOME%/conf/tomcat-users.xmlに以下の行を追加します
  <user name="hoge"   password="hoge" roles="manager" />

ブラウザで以下のURLを入力します
http://localhost:8080/manager/reload?path=/test
testはwebアプリケーション名。 server.xmlでオートリロードしてもいいですが、 これで明示的にリロードしてもいいかも。

Webアプリケーションのディレクトリ構造

今回の例ではwebapps/testの下にこんな感じでファイルがあると思います。

test.jsp
WEB-INF/
WEB-INF/web.xml
WEB-INF/classes/
WEB-INF/classes/HogeServlet.classes
WEB-INF/lib/

クライアントから直接アクセスのあるHTMLや画像データはtest.jspのようにWEB-INFの外におきます。 クラスファイルはclasses以下におきます。jarはlibにおきます。web.xmlはいろいろ設定の書けるファイルです。

WAR

war(わー)というのは、Web Application Resourceの略で、 Webアプリケーションをパッケージしたjarのことです。 作ったWebアプリケーションを圧縮したファイルで、 ちゃんと作れば、人のうちのTOMCAT(or J2EE対応サーバ) にもって行っても動きます。 TOMCATの場合、webapps直下にwarを置いておけば、 (初期設定で)起動時に自動的に解凍し読み込んでくれます。

(2002/7/22)
もどる