このページでは、Tomcatとはどのようなものか、簡単に解説しています。
3. Tomcatに配備するWebアプリケーションの構成と例
Tomcatとは、Apache Software Foundationが開発するWebコンテナという機能を実装したオープンソースのソフトウェアのことを言います。
Tomcatとはどのようなものか、主なポイントを見ていきます。
Tomcatの正式名は「Apache Tomcat」です。読み方は「アッパッチ トムキャット」です。
TomcatはJavaで実装されています。JSPやサーブレットを動作されるためのJava製のミドルウェアです。
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の媒体を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は、server.xmlに指定するHostタグのappBase属性の指定です。 デフォルトでは、<Tomcat配置場所のパス>/webappsとなります。
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)についての説明を掲載しています。
Tomcatのコンテキスト記述子(Context Descriptor:<コンテキスト名>.xml)についての説明を掲載しています。
Apache HTTP ServerとApache Tomcatで連携させることを前提に説明を記載しています。
当サイトについて
基礎知識
Apache Tomcat
関連知識
Apache HTTP Server
JSP/Servlet
サイト内のページ
Copyright (C) 2013-2017 コンテキストパスの設定の仕方. All Rights Reserved. Loarding…