トップ Apache Tomcat Tomcatとは

Apache Tomcat(アパッチ・トムキャット)とは―JavaのWebアプリ用ソフト

Tomcatは、Apache Software Foundationが開発するServletやJSPなどの仕様をオープンソースで実装したソフトウェアです。JavaのWebアプリを動作させます。この記事では、Tomcatとはどのようなものかや名前の由来、使い方など、Tomcatについて解説しています。

▲記事トップへ

目次

1. Tomcatとは
2. Tomcatの仕組みと機能
3. Tomcatの使い方
4. Tomcatを拡張してEJBなどEE機能が使えるApache TomEEについて

参考情報
更新履歴

1. Tomcatとは

Tomcatとは、Apache Software Foundationが開発するServletやJSPなどの仕様をオープンソースで実装したソフトウェアのことをいいます。

名前

Tomcatの正式名は「Apache Tomcat」です。読み方は「アッパッチ トムキャット」です。

由来

トムキャット(Tomcat)の名前の由来は猫とのことです。

トムキャット(Tomcat)の意味

トムキャット(Tomcat)は、イギリスやアメリカではオスの飼い猫の愛称の意味で使われる言葉です。 猫の名前の「トム」と人物名の「トム」を区別する際に使われるようです。

トムキャット(Tomcat)の名前の由来は猫

オライリーの書籍の『Tomcatハンドブック』によると、トムキャット(Tomcat)という名前は、James Duncan Davidson氏が新たにサーブレット/JSPサーバを作ろうとしたときに、 オライリーの書籍には動物が表紙に描かれており、オライリーでこのテクノロジの書籍が出版されたときに描いてほしい動物の名前をつけたとのことです。 自立心の高い動物、他から見向きもされなくても自分自身の面倒を見ることができるような動物にしたかったようで、その際にトムキャット(Tomcat)が頭によぎってTomcatの名前を付けたそうです。

Apache(Apache HTTP Server)とTomcat(Apache Tomcat)の違い

Apache(Apache HTTP Server)とTomcatの違いについてです。 ApacheもTomcatもHTTPサーバの機能を提供するソフトウェアですが、TomcatはJavaでできており、WebコンテナというJava Servletを実行する機能があるところが大きな違いがあります。 ミドルウェアの区分でいうとApacheがWebサーバ、TomcatがWebアプリケーションサーバになります。

なお、ApacheはApacheソフトウェア財団を指す名称ですが、ApacheというとApacheで開発・保守されているApache HTTP Serverを略してApacheと呼ぶことが多いです。 TomcatもApacheで開発・保守されているオープンソースソフトウェアです。

Tomcatとは?わかりやすく言うと何?

簡単に言うと「TomcatはJavaのWebアプリケーションを動作されるためのソフトウェア」です。 ただJavaやWebアプリケーションについてよくわからないとピンとこないかもしれません。 もっとTomcatについてわかるように次章で仕組みや機能について説明していきます。

2. Tomcatの仕組みと機能

Tomcatの仕組みと機能についてです。

仕組み

以下はTomcatの仕組みをイメージ化したものです。

Tomcatの仕組み

TomcatはJavaで実装されている

TomcatはJavaで実装されているJavaプログラムです。 Javaのmain関数はTomcat本体にあり、あらかじめ設定した位置に置いたWebアプリケーション構成ファイル(JSPやサーブレットなど)を読み込んでWebアプリケーションが使えるようになります。 TomcatはJavaプログラムですので、Tomcatのプロセスはjavaと表示されます。

TomcatはServer>Service>Connector、Engineという階層で管理

Tomcatのプロセスでは、Server>Service>Connector、Engineという階層で管理されています。 さらに掘り下げるとEngine>Host>Contextという階層になっていて、ContextがWebアプリケーションに該当します。

TomcatへのリクエストはConnector部分が受け付けてEngineの中のWebアプリケーションへ伝えます。 Tomcatはブラウザから直接HTTPのリクエストが送信できますが、間にApache HTTP ServerやNginxといったWebサーバーを経由する構成で利用されるのが一般的です。

機能

Tomcatは、Webコンテナを内包しているので、単独でWebサーバとして動作することも可能です。 一般的なWebアプリケーションでは、Apache HTTP ServerやNginx、IISなどのWebサーバソフトウェアと連携して、JSP、サーブレットなどの動的な処理の部分を担うことが多いです。

3. Tomcatの使い方

Tomcatのインストール方法や起動停止、設定、WebアプリケーションのデプロイなどTomcatの使い方について具体的な例を出して解説していきます。

Tomcatのインストール方法と例

Tomcatの媒体をhttp://archive.apache.org/dist/tomcat/からダウンロードしてインストールします。 Linux向けには、tar.gzファイルをダウンロードして、インストール先のディレクトリ(例えば/usr/local/tomcat)に解凍します。 前提としてJavaのインストールが必要です。 インストールの概要と起動停止、Linux環境でのインストールの例を見ていきます。

ダウンロード/インストール

Tomcatのダウンロード/インストールは簡単です。

起動/停止

Tomcatの起動/停止などの操作用スクリプトは解凍した媒体の「bin」ディレクトリのあります。

Tomcatのインストールの例

以下はTomcatのインストールの例です。

環境について

ここでは、CentOS5.2にjdk-6u23が入っている環境にTomcat6.0.32をインストールする例を示します。

前提条件の確認

java -versionコマンドでjavaがインストールされたことを確認します。

# java -version
java version "1.6.0_23"
Java(TM) SE Runtime Environment (build 1.6.0_23-b05)
Java HotSpot(TM) Client VM (build 19.0-b09, mixed mode, sharing)
Tomcatインストール

rootユーザにスイッチし、tomcat6のインストール媒体をダウンロードします。

$ su
# wget http://ftp.riken.jp/net/apache/tomcat/tomcat-6/v6.0.32/bin/apache-tomcat-6.0.32.tar.gz

アーカイブを解凍して、Tomcatを配置したいディレクトリ(ここでは/usr/local)に配置します。

# tar -zxvf apache-tomcat-6.0.32.tar.gz
# mv apache-tomcat-6.0.32 /usr/local/.
# ln -s /usr/local/apache-tomcat-6.0.32 /usr/local/tomcat6
# find /usr/local/ -ls

不要になったアーカイブは削除しても構いません。

# rm -f apache-tomcat-6.0.32.tar.gz
Tomcat動作確認

Tomcatに設定したポートで待ちうけしていることを確認します。

Tomcatを起動します。

# /usr/local/tomcat6/bin/startup.sh

Tomcatのプロセスを確認をします。

# ps -ef|grep tomcat
root     23648     1  5 00:49 pts/0    00:00:02 /usr/bin/java
 -Djava.util.logging.config.file=/usr/local/tomcat6/conf/logging.properties
 -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
 -Djava.endorsed.dirs=/usr/local/tomcat6/endorsed
 -classpath /usr/local/tomcat6/bin/bootstrap.jar
 -Dcatalina.base=/usr/local/tomcat6
 -Dcatalina.home=/usr/local/tomcat6
 -Djava.io.tmpdir=/usr/local/tomcat6/temp org.apache.catalina.startup.Bootstrap start

Tomcatが使用するポートを確認します。

# netstat -tnap |grep 23648
tcp        0      0 ::ffff:127.0.0.1:8005       :::*                        LISTEN      23742/java
tcp        0      0 :::8009                     :::*                        LISTEN      23742/java
tcp        0      0 :::8080                     :::*                        LISTEN      23742/java

※23648はプロセスIDです。Tomcatに設定している3つのポート(ここではデフォルトで設定されている8005、8009、8080)がLISTENとなっていることを確認します。

Tomcatに配備するWebアプリケーションの構成と例

TomcatでWebアプリケーションを動作させるには、 Webコンポーネントという形式のファイル群を配置します。

標準ディレクトリ構成

<Tomcatホームディレクトリ>下にあるwebappsは、Webアプリケーションを配置するデフォルトのディレクトリです。 特に設定を変更しない場合はここにWebアプリケーションを配置します。

Webアプリケーションのルートディレクトリの形式は以下のようになります。

公開領域に置かれるファイル

HTML、JSP、GIFファイルなど特に制限されることなく表示するファイルはルートディレクトリの下に置かれます。 ディレクトリ構成を作るとその構成がURLのパスの階層に反映されます。

公開領域に置かれないファイル

/WEB-INFは、パブリックにアクセスできないファイルが置かれます。 /WEB-INFには以下のようなファイルが置かれます。

/WEB-INF/web.xml

/WEB-INF/web.xmlは、配備記述子とよばれます。 web.xmlにはWebアプリケーションの設定オプションが記述されます。

/WEB-INF/classes

/WEB-INF/classesにはWebアプリケーションのクラスファイルが置かれます。

/WEB-INF/lib

/WEB-INF/libには、クラスファイルをJar形式でアーカイブしたファイルを置きます。 配置するディレクトリ構成のアプリケーションで使用することができます。

共有ライブラリ

<Tomcatホームディレクトリ>の下のlibディレクトリに、 クラスファイルをJar形式でアーカイブしたファイルを置けば、webappsディレクトリの下に置かれる 複数のWebアプリケーションで利用できます。

共有ライブラリを使用する場合はクラスのロード順序に注意する必要があります。

Webアプリケーションのサンプル

ブラウザにHello World!!と表示する例をいくつか示します。

JSP

ブラウザにHello World!!とJSPで表示する例です。

アプリの構成
□Tomcatホームディレクトリ
├□conf
|└□Catalina
|  └□localhost
|    └◆test.xml
└□webapps
  └□test
    └◆sample.jsp
コンテキスト指定(test.xml)
<Context path="/test"
         docBase="<tomcatホームディレクトリ>/webapps/test"
         reloadable="true">
</Context>
JSP(sample.jsp)
<html>
<head>
<title>sample</title>
</head>
<body>
<%
String msg = "Hello World!!";
out.println(msg);
%>
</body>
</html>
動作確認

ブラウザより、「http://<tomcatサーバのホスト>:8080/test/sample.jsp」へアクセス。 「Hello World!!」と表示される。

サーブレット

ブラウザにHello World!!とServletで表示する例です。

アプリの構成
□tomcatホームディレクトリ
├□conf
|└□Catalina
|  └□localhost
|    └◆test.xml
└□webapps
  └□test
    └□WEB-INF
      ├□classes
      |└◆HelloWorld.class
      └◆web.xml
コンテキスト指定(test.xml)
<Context path="/test"
         docBase="<tomcatホームディレクトリ>/webapps/test"
         reloadable="true">
</Context>
Servlet(HelloWorld.java)
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloWorld extends HttpServlet {
    private static final long serialVersionUID = 1L;
    public void doGet(HttpServletRequest req, HttpServletResponse res)
                         throws IOException, ServletException {
        res.setContentType("text/html");
        PrintWriter out = res.getWriter();
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Hello World!</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("Hello World!");
        out.println("</body>");
        out.println("</html>");
    }
}
コンパイル
java -classpath <tomcatホーム>/lib/servlet-api.jar:. HelloWorld.java
配備記述子(web.xml)
<?xml version="1.0" encoding="UTF-8" ?>

<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>hello</servlet-name>
        <servlet-class>HelloWorld</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
</web-app>
動作確認

ブラウザより、「http://<tomcatサーバのホスト>:8080/test/hello」へアクセスします。 「Hello World! 」と表示されれば成功です。

Tomcatの全般的な設定とコンテキスト関連の設定

server.xmlは、Tomcatの全般的なサーバの機能を定義する設定ファイルです。

<Tomcatのホーム>/confディレクトリ配下に配置されています。

たとえば、HTTPやAJPなどの接続やTomcatの起動停止を行う管理機能の設定を定義します。 また、コンテキストなどWebコンテナとしての設定も定義できます。

Context要素

各WebアプリケーションはWebアプリケーションアーカイブ(WAR)ファイル、または対応するディレクトリに基づいています。 Context(コンテキスト)は、特定の仮想ホスト内で実行されているWebアプリケーションを表します。

<Context path="/<コンテキスト名>"
            docBase="<Webアプリケーションの置き場所>"
            reloadable="<Tomcat起動時のファイル更新反映有無(true or false)>"
            crossContext="他のコンテキストへのアクセス有無(true or false)" />
crossContext属性

crossContext属性は、ServletContext.getContext() メソッドを使って 他のコンテキストにアクセスできるかを指定します。 trueにすると許しない設定となります。

docBase属性

docBase属性は、ドキュメントのベースディレクトリ またはWebアプリケーションアーカイブファイル(war)へのパスを指定します。

appBase属性に指定したパスの下に、Webアプリケーションを配置している場合は記述する必要ありません。 指定する場合はappBase属性の指定パスを基準にした参照方法でパスを記述します。

appBase属性

appBase属性とは、該当Hostのウェブアプリケーションディレクトリや/、WARファイルを指定するTomcatのserver.xmlの設定要素であるHostに指定できる属性です。

詳細

path属性

server.xmlのContext要素のpath属性はWebアプリケーションのコンテキストパスを設定します。

コンテキストパス(Context path)は、TomcatがWebアプリケーションを区別するためのURL内の表記のことです。

コンテキストの意味

コンテキストは、Tomcat(APサーバ)が動作させる個々のWebアプリケーションのこと意味します。

Tomcatは、リクエストのURLからコンテキストを特定して、該当するコンテキストを実行します。 そのURL内のコンテキストを区別する部分をコンテキストパス(Context path)といいます。

WebアプリケーションのURLは、「TomcatのURL + コンテキストパス+コンテキスト内のリソースのパス」で示され、 URLのTomcatの、どのWebアプリケーションの呼出要求であるかわかるようになっています。
例)http://localhost:8080/pathOfContext/resource/path.jsp

なお、コンテキストパスは、ServletContext.getContextPath()で取得できます。

reloadable属性

reloadable属性は、 Webアプリケーション更新時にTomcatを再起動せずにサーブレットのクラスファイルを更新して反映するかを設定します。 デフォルト値はfalseです。trueに設定するとファイルを更新したタイミングでファイル更新内容が反映されます。

デフォルト値がfalseの通り、開発時はtrueにしておくと便利ですが、反映時のオーバーヘッドがあるので 商用環境ではfalseに設定することが推奨されています。

コンテキスト関連のTomcatの設定

以下ではコンテキスト関連のTomcatの設定について詳しくまとめています。

TomcatのContextタグとその属性

TomcatのContextタグと属性についての情報を掲載しています。

詳細

Tomcatの設定ファイル(server.xml)

Tomcatの設定ファイル(server.xml)についての説明を掲載しています。

詳細

6. WebサーバやCGIなどTomcatの外部連携について

WebサーバやCGIなどTomcatの外部連携についてです。

Webサーバとの連携

Tomcatは、Apache HTTP ServerやNginx、IISと連携して構成することができます。

Apache HTTP Serverのコンテキストパスの設定方法

Apache HTTP ServerとApache Tomcatで連携させることを前提に説明を記載しています。

詳細

外部CGIプログラムとの連携

Tomcatは、外部CGIプログラムとも連携できます。

CGIとは

CGI (Common Gateway Interface) は、Webサーバーが外部のCGIプログラムもしくはCGIスクリプトと対話する方法を定義します。

CGIサポートの追加ができる

Tomcat内では、TomcatをHTTPサーバーとして使用し、CGIサポートが必要な場合に、CGIサポートを追加できます。 通常、これはApacheのようなWebサーバーを実行したくない場合に開発中に行われます。 TomcatのCGIサポートはApache httpdとほぼ互換ですが、いくつかの制限があります(例:1つのcgi-binディレクトリのみ)。

CGIサポートは、サーブレットクラスorg.apache.catalina.servlets.CGIServletを使用して実装されます。 従来、このサーブレットはURLパターン 「/cgi-bin/*」 にマップされています。

デフォルトでは、TomcatのCGIサポートは無効になっています。

4. Tomcatを拡張してEJBなどEE機能が使えるApache TomEEについて

Tomcatに関連して、Apache TomEEについてふれていきます。

TomEEの読み方

TomEEの読み方は「Tommy(トミー)」です。

TomEEとは?TomcatとTomEEの違いは?

Apache TomEEは、TomcatにEE機能を加えたソフトウェアです。 Apache Jakarta EE 9.1認定のアプリケーションサーバで、TomcatではEJBコンテナは実装されていませんが、Tomcatを拡張したTomEEではEJBが使えます。

EJBとは

EJBは、Enterprise JavaBeansの略でJavaBeans仕様と同様のものを、ネットワーク分散型ビジネスアプリケーションのサーバサイドで実現した仕様です。

参考情報

参考情報です。

Spring Boot

Spring Bootとは、オープンソースのJavaベースのフレームワークです。マイクロサービスの開発に使用されます。

詳細

更新履歴

戻る

当サイトについて

Apache Tomcat

Apache HTTP Server

JSP/Servlet

基礎知識

アプリケーションコンテキスト / コンテキスト / コンテキストパス / コンテキスト名.xml / コンテキストルート / サーブレット / マイクロサービス / ルート

appBase属性 / ApplicationContext / getContextPath / JSP / Maven / PageContext / root / server.xml / Servlet / Spring Boot / Tomcat

サイト内のページ