トップ Apache Tomcat Tomcatとは

Tomcat(トムキャット:Apache Tomcat)とは

概要

このページでは、Tomcatとはどのようなものか、簡単に解説しています。

目次

1. Tomcatとは

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

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

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

更新履歴

1. Tomcatとは

Tomcatとは、Apache Software Foundationが開発するWebコンテナという機能を実装したオープンソースのソフトウェアのことを言います。

説明

Tomcatとはどのようなものか、主なポイントを見ていきます。

名前

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

実装

TomcatはJavaで実装されています。JSPやサーブレットを動作されるためのJava製のミドルウェアです。

機能

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

2. 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となっていることを確認します。

3. 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! 」と表示されれば成功です。

4. 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は、server.xmlに指定するHostタグのappBase属性の指定です。 デフォルトでは、<Tomcat配置場所のパス>/webappsとなります。

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の設定について詳しくまとめています。

更新履歴

戻る

当サイトについて

基礎知識

Apache Tomcat

関連知識

Apache HTTP Server

JSP/Servlet

サイト内のページ