Tomcatは、Apache Software Foundationが開発するServletやJSPなどの仕様をオープンソースで実装したソフトウェアです。JavaのWebアプリを動作させます。この記事では、Tomcatとはどのようなものかや名前の由来、使い方など、Tomcatについて解説しています。
1. Tomcatとは
2. Tomcatの仕組みと機能
3. Tomcatの使い方
4. Tomcatを拡張してEJBなどEE機能が使えるApache TomEEについて
Tomcatとは、Apache Software Foundationが開発するServletやJSPなどの仕様をオープンソースで実装したソフトウェアのことをいいます。
Tomcatの正式名は「Apache Tomcat」です。読み方は「アッパッチ トムキャット」です。
トムキャット(Tomcat)の名前の由来は猫とのことです。
トムキャット(Tomcat)は、イギリスやアメリカではオスの飼い猫の愛称の意味で使われる言葉です。 猫の名前の「トム」と人物名の「トム」を区別する際に使われるようです。
オライリーの書籍の『Tomcatハンドブック』によると、トムキャット(Tomcat)という名前は、James Duncan Davidson氏が新たにサーブレット/JSPサーバを作ろうとしたときに、 オライリーの書籍には動物が表紙に描かれており、オライリーでこのテクノロジの書籍が出版されたときに描いてほしい動物の名前をつけたとのことです。 自立心の高い動物、他から見向きもされなくても自分自身の面倒を見ることができるような動物にしたかったようで、その際にトムキャット(Tomcat)が頭によぎって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はJavaのWebアプリケーションを動作されるためのソフトウェア」です。 ただJavaやWebアプリケーションについてよくわからないとピンとこないかもしれません。 もっとTomcatについてわかるように次章で仕組みや機能について説明していきます。
Tomcatの仕組みと機能についてです。
以下はTomcatの仕組みをイメージ化したものです。
TomcatはJavaで実装されているJavaプログラムです。 Javaのmain関数はTomcat本体にあり、あらかじめ設定した位置に置いたWebアプリケーション構成ファイル(JSPやサーブレットなど)を読み込んでWebアプリケーションが使えるようになります。 TomcatはJavaプログラムですので、Tomcatのプロセスはjavaと表示されます。
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、サーブレットなどの動的な処理の部分を担うことが多いです。
Webコンテナは、Webコンポーネントの実行基盤のことをいいます。 JSPやサーブレットを処理するだけではなく、HTMLなど静的なページを出力するWebサーバの機能も備えています。
Webコンポーネントは、Java EEの実装規約にあるコンポーネントの1つです(他にEJBコンポーネントがあります)。 HTML、JSP、サーブレットなどで実装されます。 Webブラウザからのリクエストを受け取り、背後のビジネス層に伝えます。 ビジネス層からの情報をWebブラウザが表示できるレスポンスに変換して送り返すWebアプリケーションです。
Tomcatのインストール方法や起動停止、設定、WebアプリケーションのデプロイなどTomcatの使い方について具体的な例を出して解説していきます。
Tomcatの媒体をhttp://archive.apache.org/dist/tomcat/からダウンロードしてインストールします。 Linux向けには、tar.gzファイルをダウンロードして、インストール先のディレクトリ(例えば/usr/local/tomcat)に解凍します。 前提としてJavaのインストールが必要です。 インストールの概要と起動停止、Linux環境でのインストールの例を見ていきます。
Tomcatのダウンロード/インストールは簡単です。
Tomcatのインストール媒体は「https://tomcat.apache.org/download-XX.cgi」からダウンロードできます。 「XX」はバージョン番号です。たとえば、Tomcat 9.0の場合は「90」です。
Tomcatのインストールはダウンロードしてきたアーカイブを解凍するだけです。 OS起動時に自動起動させたり、同じ媒体で複数のTomcatを起動させたりするなど、専用の起動スクリプトを作成して使用することも可能です。
※TomcatはJavaで出来ています。 Javaの実行環境(JRE)がTomcatを起動させるときの条件になります。 JREがインストールされている必要があります。
Tomcatの起動/停止などの操作用スクリプトは解凍した媒体の「bin」ディレクトリのあります。
Tomcatの起動はWindowsの場合は「startup.bat」、LinuxなどのOSでは「startup.sh」を使用します。
Windowsの例)<Tomcat解凍フォルダ>\bin\startup.bat
Linux等の例)<Tomcat解凍フォルダ>/bin/startup.sh
Tomcatの停止はWindowsの場合は「shutdown.bat」、LinuxなどのOSでは「shutdown.sh」を使用します。
Windowsの例)<Tomcat解凍フォルダ>\bin\shutdown.sh
Linux等の例)<Tomcat解凍フォルダ>/bin/shutdown.sh
以下は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)
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を起動します。
# /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アプリケーションを動作させるには、 Webコンポーネントという形式のファイル群を配置します。
<Tomcatホームディレクトリ>下にあるwebappsは、Webアプリケーションを配置するデフォルトのディレクトリです。 特に設定を変更しない場合はここにWebアプリケーションを配置します。
Webアプリケーションのルートディレクトリの形式は以下のようになります。
HTML、JSP、GIFファイルなど特に制限されることなく表示するファイルはルートディレクトリの下に置かれます。 ディレクトリ構成を作るとその構成がURLのパスの階層に反映されます。
/WEB-INFは、パブリックにアクセスできないファイルが置かれます。 /WEB-INFには以下のようなファイルが置かれます。
/WEB-INF/web.xmlは、配備記述子とよばれます。 web.xmlにはWebアプリケーションの設定オプションが記述されます。
/WEB-INF/classesにはWebアプリケーションのクラスファイルが置かれます。
/WEB-INF/libには、クラスファイルをJar形式でアーカイブしたファイルを置きます。 配置するディレクトリ構成のアプリケーションで使用することができます。
<Tomcatホームディレクトリ>の下のlibディレクトリに、 クラスファイルをJar形式でアーカイブしたファイルを置けば、webappsディレクトリの下に置かれる 複数のWebアプリケーションで利用できます。
共有ライブラリを使用する場合はクラスのロード順序に注意する必要があります。
ブラウザにHello World!!と表示する例をいくつか示します。
ブラウザにHello World!!とJSPで表示する例です。
□Tomcatホームディレクトリ ├□conf |└□Catalina | └□localhost | └◆test.xml └□webapps └□test └◆sample.jsp
<Context path="/test"
docBase="<tomcatホームディレクトリ>/webapps/test"
reloadable="true">
</Context>
<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
<Context path="/test"
docBase="<tomcatホームディレクトリ>/webapps/test"
reloadable="true">
</Context>
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
<?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! 」と表示されれば成功です。
server.xmlは、Tomcatの全般的なサーバの機能を定義する設定ファイルです。
<Tomcatのホーム>/confディレクトリ配下に配置されています。
たとえば、HTTPやAJPなどの接続やTomcatの起動停止を行う管理機能の設定を定義します。 また、コンテキストなどWebコンテナとしての設定も定義できます。
各WebアプリケーションはWebアプリケーションアーカイブ(WAR)ファイル、または対応するディレクトリに基づいています。 Context(コンテキスト)は、特定の仮想ホスト内で実行されているWebアプリケーションを表します。
<Context path="/<コンテキスト名>" docBase="<Webアプリケーションの置き場所>" reloadable="<Tomcat起動時のファイル更新反映有無(true or false)>" crossContext="他のコンテキストへのアクセス有無(true or false)" />
crossContext属性は、ServletContext.getContext() メソッドを使って 他のコンテキストにアクセスできるかを指定します。 trueにすると許しない設定となります。
docBase属性は、ドキュメントのベースディレクトリ またはWebアプリケーションアーカイブファイル(war)へのパスを指定します。
appBase属性に指定したパスの下に、Webアプリケーションを配置している場合は記述する必要ありません。 指定する場合はappBase属性の指定パスを基準にした参照方法でパスを記述します。
appBase属性とは、該当Hostのウェブアプリケーションディレクトリや/、WARファイルを指定するTomcatのserver.xmlの設定要素であるHostに指定できる属性です。
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属性は、 Webアプリケーション更新時にTomcatを再起動せずにサーブレットのクラスファイルを更新して反映するかを設定します。 デフォルト値はfalseです。trueに設定するとファイルを更新したタイミングでファイル更新内容が反映されます。
デフォルト値がfalseの通り、開発時はtrueにしておくと便利ですが、反映時のオーバーヘッドがあるので 商用環境ではfalseに設定することが推奨されています。
以下ではコンテキスト関連のTomcatの設定について詳しくまとめています。
TomcatのContextタグと属性についての情報を掲載しています。
Tomcatの設定ファイル(server.xml)についての説明を掲載しています。
WebサーバやCGIなどTomcatの外部連携についてです。
Tomcatは、Apache HTTP ServerやNginx、IISと連携して構成することができます。
Apache HTTP ServerとApache Tomcatで連携させることを前提に説明を記載しています。
Tomcatは、外部CGIプログラムとも連携できます。
CGI (Common Gateway Interface) は、Webサーバーが外部の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サポートは無効になっています。
Tomcatに関連して、Apache TomEEについてふれていきます。
TomEEの読み方は「Tommy(トミー)」です。
Apache TomEEは、TomcatにEE機能を加えたソフトウェアです。 Apache Jakarta EE 9.1認定のアプリケーションサーバで、TomcatではEJBコンテナは実装されていませんが、Tomcatを拡張したTomEEではEJBが使えます。
EJBは、Enterprise JavaBeansの略でJavaBeans仕様と同様のものを、ネットワーク分散型ビジネスアプリケーションのサーバサイドで実現した仕様です。
参考情報です。
Spring Bootとは、オープンソースのJavaベースのフレームワークです。マイクロサービスの開発に使用されます。
当サイトについて
Apache Tomcat
Apache HTTP Server
JSP/Servlet
基礎知識
アプリケーションコンテキスト / コンテキスト / コンテキストパス / コンテキスト名.xml / コンテキストルート / サーブレット / マイクロサービス / ルート
appBase属性 / ApplicationContext / getContextPath / JSP / Maven / PageContext / root / server.xml / Servlet / Spring Boot / Tomcat
サイト内のページ
Copyright (C) 2013-2023 コンテキストパスの設定の仕方. All Rights Reserved. Loarding…