|
このドキュメントは、Tomcatに関するいくつかの基本的な情報について説明します。 ここで説明する項目は、以下の通りです。
その質問に対する回答がまだ存在しない場合には、Tomcat FAQか、この文章に追加することを奨励します。 このドキュメントに関するコメントや提案があるならば、遠慮しないでTomcat メーリングリストに送ってください。
Tomcatは、JSP環境を持ったServletコンテナです。 Servletコンテナは、ユーザのためにServletを管理したり、実行するランタイムシェルです。
Servletコンテナは、だいたい以下のように分類されます。
Tomcatはスタンドアロンコンテナとしても(主に開発やデバッグ環境用です)、既存のWebサーバに付加しても(現在ApacheやIIS,Netscapeなどのサーバが サポートされています)使用できます。これは、Tomcatを配備しているときはいつも使用する方法を決めなければならないだろうことを意味し、また、オプ ションを2,3選択すると、Webサーバアダプターをインストールする必要があるでしょう。
これはよくある誤解です。JservはApacheで使用することを目的に作られたServletAPI2.0準拠のコンテナです。 Tomcatは完全にコードを書き直された、ServletAPI2.2とJSP1.1に準拠したコンテナです。
TomcatはJservで使われていたコード(特にJserv's Apache server adapterの部分)をいくつか使っています。 しかし、これがTomcatとJservの最後の類似点です。
とても簡単です。以下のようにするだけです。
以上で、Tomcatをスタンドアロン型(Type1)Servletコンテナを動かすことができます。
binディレクトリにあるスクリプトを使用して、Tomcatの起動と停止を行います。
Tomcatの起動
UNIX: bin/startup.sh
Win32: bin\startup
Tomcatの停止
UNIX: bin/shutdown.sh
Win32: bin\shutdown
すでにTomcatバイナリ版配布をzipやtarでを展開しているとすると、以下のようなディレクトリ構成になります。
ディレクトリ名 | 説明 |
---|---|
bin | startup/shutdownなどのスクリプトが含まれています。 |
conf | server.xml (Tomcatのメイン設定ファイル) とTomcat内で動作する様々な Webアプリケーションのデフォルト値を設定するweb.xmlなどのファイルが含まれています。 |
doc | Tomcatに関する種々雑多なドキュメントが含まれています。 |
lib | Tomcatで使われる様々なjarファイルが含まれています。 UNIX上では、このディレクトリ内のすべてのファイルがTomcatのCLASSPATHに追加されます。 |
logs | Tomcatのログファイルが保存されます。 |
src | Servlet APIのソースファイルが含まれています。 しかし、興奮しないでください。 すべてのServletコンテナで実装する必要がある空のインターフェイスと抽象クラスがあるだけです。 |
webapps | サンプルアプリケーションが含まれています。 |
さらにTomcatは、以下のサブディレクトリを作成します。
work | Tomcatが自動的に生成します。 Tomcatの動作中に、(コンパイル済みのJSPファイルのような)中間ファイルを置く場所です。 Tomcatの動作中にこのディレクトリを削除すると、JSPページを実行できなくなります。 |
classes | CLASSPATHにクラスを追加するために、このディレクトリを作ることができます。 このディレクトリに追加したすべてのクラスは、TomcatのCLASSPATHに含まれます。 |
TomcatはJavaプログラムなので、いくつかの環境変数を設定すれば、コマンドラインから実行 することができます。 しかし、環境変数や、以下のようなコマンドライン引数をつけてTomcatを起動することは、エラー が発生しやすく、面倒です。 その代わりに、Tomcat開発チームは、Tomcatを簡単に起動したり、停止したりできるように数個の スクリプトを用意しています。
注: スクリプトはTomcatの起動や停止のための手軽な方法にすぎません。 Tomcatに正しいコマンドラインを指定するならば、CLASSPATHや、PATHやLD_LIBRARY_PATHなどの環境 変数をカズタマイズするように、スクリプトを変更することができます。
これらのスクリプトとはどんなものでしょう? 以下に、一般的なユーザにとってもっとも重要なスクリプトを示します。
スクリプト名 | 説明 |
---|---|
tomcat | メインスクリプトです。 CLASSPATHやTOMCAT_HOME、JAVA_HOMEを取り込んて、適切な環境を設定してから、適切なコマンド ライン引数でTomcatを起動します。 |
startup | Tomcatをバックグラウンドで起動します。これは"tomcat start" のショートカットです。 |
shutdown | Tomcatを停止します。これは"tomcat stop" のショートカットです。 |
ユーザにとって一番重要なスクリプトは、tomcat(tomcat.sh/tomcat.bat)です。 他のTomcatに関するスクリプトは、(異なるコマンドライン引数を設定するなど)tomcatスクリプトに対して 簡単に一つの作業をおこなうようなエントリポイントとして働きます。
tomcat.sh/tomcat.batスクリプトを調べると、以下のように動作しているのがわかります。
オペレーティングシステム | 動作 |
---|---|
Unix |
|
Win32 |
|
Win32版のtomcat.batはUNIX版のものに比べて堅牢でないように見えるかもしれません。 とりわけTOMCAT_HOMEやJAVA_HOMEの値を推測しないで、"."だけでTOMCAT_HOMEを推測しようとするので。 CLASSPATHは全ての場合というわけではありませんが、動的に構築されます。 TOMCAT_HOMEがスペース文字や、Win9xにおいてTOMCAT_HOMEが8.3のネーミング規則に沿わない場合、動的に 構築されることはありません。
Tomcatの設定ファイルは、2個のファイルに基づきます。
この項では、これら2つのファイルについて説明します。 しかし、web.xmlの内部までは説明しません。 これについてはServlet APIの仕様で充分に説明されているので、Tomcatでweb.xmlを使用する方法について説明します。
server.xmlは、Tomcatのメイン設定ファイルです。これには以下のような2つの目的があります。
要素 | 説明 |
---|---|
Server | server.xmlの最上位要素です。 Serverは1つのTomcatサーバを定義します。 一般にはそれほど気にかける必要はありません。 Server要素は、タイプLoggerとContextManagerの要素を含むことができます。 |
Logger | この要素は、loggerオブジェクトを定義します。 どのloggerも、ログ出力を保存するログファイルへのパスとverbosityLevel(ログレベルを指定します)だけでなく、 それを特定できる名前を持っています。 現在の段階では、(ServletContext.log()を実行する)ServletやJSPファイル、Tomcatランタイムに対して、複数のloggerが使われています。 |
ContextManager | ContextManagerは、ContextInterceptorとRequestInterceptor, Context, Connectorの設定と構造を定義します。
ContextManagerには、以下のような属性があります。
|
ContextInterceptor & RequestInterceptor | これらのインタセプタは、ContextManagerで起こるイベントを監視します。 たとえば、ContextInterceptorはTomcatの起動停止イベントを監視し、RequestInterceptorはユーザリクエストが必要とする 様々なサービスを監視します。 Tomcatの管理者はこれらのインターセプタについて詳しく知っている必要はありませんが、開発者は、これがTomcatにどう 「グローバルな」タイプの操作(たとえば、セキュリティやリクエスト単位のログ)を実現されているのかを知っておくべきで す。 |
Connector | Connectorは、Webサーバを経由するか、(スタンドアロン設定の場合には)ユーザのブラウザに直接送信するコネクションを
提供します。
Connectorオブジェクトは、Tomcatワーカスレッドと、様々なクライアントに接続しているソケットからの読み書き要求や返答を
管理します。
Connectorの設定には、以下のようなものがあります.
|
Context | 各Contextは、Webアプリケーションを置くTomcatの階層パスを表します。
Contextには以下のようなものがあります。
|
追加情報がserver.xmlファイルに見つかるかもしれません。
Tomcatは、デフォルトではTOMCAT_HOME/conf/server.xml を設定として使用します。 デフォルトの設定では、TOMCAT_HOMEをcontextのベースとして使用します。
これは、"-f /path/to/serverxml"オプションを使用して別のサーバ設定ファイルを指定して、さらにコンテキストマネージャのホー ムプロパティを設定すれば、変更することができます。 以下のように、ホーム内に必要なファイルを準備する必要があります。
server.xml の ContextManagerのhomeプロパティが相対的なら、作業ディレクトリも相対的になります。
web.xmlの詳細な説明とWebアプリケーション構造(ディレクトリ構成と設定を含みます)は、 Servlet API仕様の第9章、10章および14章で述べられていますので、ここではそれに関して書くつ もりはありません。
しかし、web.xmlに関しては、少しTomcatに関連した「特徴」があります。 Tomcatは、confディレクトリ中にデフォルトのweb.xmlを置いておけば、すべてのコンテキストに対してデフォルトのweb.xmlの値を定義します。 新しいコンテキストを構築する時には、Tomcatは基本設定としてデフォルトのweb.xmlを使用して、さらにアプリケーション専用のweb.xml(そのアプリケー ションのWEB-INF/web.xmlに置きます)を使用して、これらのデフォルト値を上書きします。
今までは、サーバのアドオンとしては説明しないで、スタンドアロン型コンテナとして、それがどのように使用できるかについて説明してきました。 しかし、この形態には以下のような欠点があります。
このような理由から、実際のサイトでは、静的なコンテンツを配信するためにApacheのようなWebサーバを使用して、Servlet/JSPのアドオンとして Tomcatを使用することを勧めます。
ここでは、徹底的にさまざまな設定を扱うつもりはありません。 代わりに。以下のことについて説明します。
簡単に説明すれば、WebサーバはクライアントからのHTTPリクエストを常に待っています。 リクエストが届いた時には、サーバはあらかじめ必要なコンテンツを用意しておくことで、リクエストに必要な処理をおこないます。 Servletコンテナを追加すると、この動作が少し変わります。つまり、Webサーバは以下の処理を実行する必要があります。
ユーザが、バーチャルホストを使用するように設定したいと思っていたり、複数の開発者に同じWebサーバで異なるServletコンテナのJVMを動作 させるようにしたいと思っている時には、さらに問題は複雑になります。 この二つの場合については、後から説明します。
誰でも思いつくような、もっとも明確な環境設定は、Servletコンテナの管理にあるServletのURLを明示することです。 これは明確なのですが、どのリクエストをServletコンテナに渡すのかを知っておかねばいけません。 Webサーバ/servletコンテナの連携のためには、さらに以下のような項目を設定する必要があります。
この節では、ApacheとTomcatを連動させるように設定する方法と、あなたが使う必要がある設定指示子について説明します。 追加情報はjserv install page でも入手することができます。
Tomcatは、起動時に自動的にApache用の設定ファイルをTOMCAT_HOME/conf/tomcat-apache.confに生成します。 たいていの場合は、このファイルを特に変更する必要はなく、Apacheのhttpd.confに("Include TOMCAT_HOME/conf/tomcat-apache.conf"を追加して) 取り込むだけです。たとえば、AJPポートを8007以外にしたいというような要求がある場合には、このファイルをもとに編集して、別ファイル名で保存 して使うこともできます。ただし、自分自身でApacheの設定を管理する場合には、新しいコンテキストを追加するたびに、それをアップデートする必要があります。
Tomcat: 新たにコンテキストを追加したら、TomcatとApacheを再起動する必要があります。 Apacheを再起動しないで、環境を変更することはできません。 そして、TOMCAT_HOME/conf/tomcat-apache.conf ファイルはTomcatが起動する時に生成されるので、Apacheを起動する前にTomcatを起動しておく必要があります。 Tomcatは、起動するたびにTOMCAT_HOME/conf/tomcat-apache.confを上書きするので、カスタマイズした環境設定ファイルは、どこかに保存しておく必要があります。
Apache-Tomcatの環境設定は、Jservと同様にApacheコアの設定指示子を使用しますので、最初のうちはあなたを混乱させるかもしれませんが、以下の2つが設定を簡単にします。
########################################################### # A minimalistic Apache-Tomcat Configuration File # ########################################################### # Note: this file should be appended or included into your httpd.conf # (1) Loading the jserv module that serves as Tomcat's apache adapter. LoadModule jserv_module libexec/mod_jserv.so # (1a) Module dependent configuration. <IfModule mod_jserv.c> # (2) Meaning, Apache will not try to start Tomcat. ApJServManual on # (2a) Meaning, secure communication is off ApJServSecretKey DISABLED # (2b) Meaning, when virtual hosts are used, copy the mount # points from the base server ApJServMountCopy on # (2c) Log level for the jserv module. ApJServLogLevel notice # (3) Meaning, the default communication protocol is ajpv12 ApJServDefaultProtocol ajpv12 # (3a) Default location for the Tomcat connectors. # Located on the same host and on port 8007 ApJServDefaultHost localhost ApJServDefaultPort 8007 # (4) ApJServMount /examples /root # Full URL mount # ApJServMount /examples ajpv12://hostname:port/root </IfModule> |
設定プロセスは、以下で説明するように、大きく4つのステップに分かれているのがわかるでしょう。
前述のように、TomcatにApacheのリクエストをリダイレクトさせるためにはWebサーバアダプタが必要です。 Apacheに関しては、このアダプタはmod_jservを少し変更したものです。
ここを見て、あなたの使用しているOS(通常は、NT用があります)に適したmod_jservのプリビルド版が 存在すれば、それを使ってください。しかし、(OSが多すぎるとか、開発者が足りないとか、ライフサイクルが短かいなどの理由で)あなたが必要とするネイティブライブラリが まだないかも知れません。さらに、あなたがビルドしたApacheと特定のUNIX系OSにおける小さな違いが原因で、ダイナミックリンクエラーが発生するかもしれません。その場合 には、mod_jservをあなたのシステムでビルドしてみてください(手順はそれほど難しくはありませんから、混乱しないでください! )
以前のApache-Tomcat設定ファイルは少し非効率的で、/examplesから始まる名前のリソースに対するすべてのリクエストをTomcatで処理するように指定 していました。本当にその必要があるのでしょうか? Servletコンテキストの一部として使用される(たとえばimagesや静的なHTMLのような)静的なファイルは多いので すが、このファイルをTomcatが処理する必要があるのでしょうか?
実際に、そうする理由があるかもしれません。たとえば、以下のような場合です。
Apacheに静的なファイルを処理させるためには、以下の設定が必要です。
###################################################################### # Apache-Tomcat Smart Context Redirection # ###################################################################### LoadModule jserv_module modules/ApacheModuleJServ.dll <IfModule mod_jserv.c> ApJServManual on ApJServDefaultProtocol ajpv12 ApJServSecretKey DISABLED ApJServMountCopy on ApJServLogLevel notice ApJServDefaultHost localhost ApJServDefaultPort 8007 # # Mounting a single smart context: # # (1) Make Apache know about the context location. Alias /examples c:/jakarta-tomcat/webapps/examples # (2) Optional, customize Apache context service. <Directory "c:/jakarta-tomcat/webapps/examples"> Options Indexes FollowSymLinks # (2a) No directory indexing for the context root. # Options -Indexes # (2b) Set index.jsp to be the directory index file. # DirectoryIndex index.jsp </Directory> # (3) Protect the WEB-INF directory from tampering. <Location /examples/WEB-INF/> AllowOverride None deny from all </Location> # (4) Instructing Apache to send all the .jsp files under the context to the # jserv servlet handler. <LocationMatch /examples/*.jsp> SetHandler jserv-servlet </LocationMatch> # (5) Direct known servlet URLs to Tomcat. ApJServMount /examples/servlet /examples # (6) Optional, direct servlet only contexts to Tomcat. ApJServMount /servlet /ROOT </IfModule> |
見ればわかりますが、この設定ファイルのばじめの方は、先ほどの例と同じです。 ただし、最後のステップ(コンテキストのマウント)は、一連のApacheと今から説明する ApJServ設定指示子で置き換えられています。
異なるJVMで異なるコンテキストを実行すると便利なことがあります。たとえば、以下のような場合です。
###################################################################### # Apache-Tomcat with JVM per Context # ###################################################################### LoadModule jserv_module modules/ApacheModuleJServ.dll <IfModule mod_jserv.c> ApJServManual on ApJServDefaultProtocol ajpv12 ApJServSecretKey DISABLED ApJServMountCopy on ApJServLogLevel notice ApJServDefaultHost localhost ApJServDefaultPort 8007 # Mounting the first context. ApJServMount /joe ajpv12://joe.corp.com:8007/joe # Mounting the second context. ApJServMount /bill ajpv12://bill.corp.com:8007/bill </IfModule> |
この例でわかるように、ajpのフルURLをマウントすれば、いくつかのJVMを(異なるマシンで動作していても)使用できます。 実際には、このフルURLに、Tomcatプロセスが動作するホストとポートを指定します。
2つのTomcatプロセスを同一マシン上で実行させたい場合には、それぞれが異なる接続ポートを使用するように設定しなければいけません。 たとえば、2つのJVMがlocalhostで実行されるとすると、Apache-Tomcatの設定以下のようになります。
###################################################################### # Apache-Tomcat with Same Machine JVM per Context # ###################################################################### LoadModule jserv_module modules/ApacheModuleJServ.dll <IfModule mod_jserv.c> ApJServManual on ApJServDefaultProtocol ajpv12 ApJServSecretKey DISABLED ApJServMountCopy on ApJServLogLevel notice ApJServDefaultHost localhost ApJServDefaultPort 8007 # Mounting the first context. ApJServMount /joe ajpv12://localhost:8007/joe # Mounting the second context. ApJServMount /bill ajpv12://localhost:8009/bill </IfModule> |
上のファイルを見れば、同一マシン上の異なるポートを指定している2つの明示的なApJServマウントポイントがあることがわかります。 つまり、この設定をおこなうためには、さらにserver.xmlファイルの設定が必要になるのは明らかです。 このファイルのように異なるTomcatプロセスを動かす場合には、異なる<Connector>設定が必要です。 実際には、次のサンプルで示すように異なる<Connector>を持つ2つの異なるserver.xmlファイル(server_joe.xmlとserver_bill.xml)が 必要です。
<?xml version="1.0" encoding="ISO-8859-1"?> <Server> <!-- Debug low-level events in XmlMapper startup --> <xmlmapper:debug level="0" /> <!-- @@@ Note, the log files are suffixed with _joe to distinguish them from the bill files. --> <Logger name="tc_log" path="logs/tomcat_joe.log" customOutput="yes" /> <Logger name="servlet_log" path="logs/servlet_joe.log" customOutput="yes" /> <Logger name="JASPER_LOG" path="logs/jasper_joe.log" verbosityLevel = "INFORMATION" /> <!-- @@@ Note, the work directory is suffixed with _joe to distinguish it from the bill work directory. --> <ContextManager debug="0" workDir="work_joe" > <!-- ==================== Interceptors ==================== --> ... <!-- ==================== Connectors ==================== --> ... <!-- Apache AJP12 support. This is also used to shut down tomcat. --> <!-- @@@ This connector uses port number 8007 for it's ajp communication --> <Connector className="org.apache.tomcat.service.PoolTcpConnector"> <Parameter name="handler" value="org.apache.tomcat.service.connector.Ajp12ConnectionHandler"/> <Parameter name="port" value="8007"/> </Connector> <!-- ==================== Special webapps ==================== --> <!-- @@@ the /jow context --> <Context path="/joe" docBase="webapps/joe" debug="0" reloadable="true" > </Context> </ContextManager> </Server> |
server_joe.xmlを見ると、<Connector>がポート8007に設定されているのがわかります。 一方server_bill.xml(次に示します)を見ると、<Connector>はポート番号8009に設定さ れています。
<?xml version="1.0" encoding="ISO-8859-1"?> <Server> <!-- Debug low-level events in XmlMapper startup --> <xmlmapper:debug level="0" /> <!-- @@@ Note, the log files are suffixed with _bill to distinguish them from the joe files. --> <Logger name="tc_log" path="logs/tomcat_bill.log" customOutput="yes" /> <Logger name="servlet_log" path="logs/servlet_bill.log" customOutput="yes" /> <Logger name="JASPER_LOG" path="logs/jasper_bill.log" verbosityLevel = "INFORMATION" /> <!-- @@@ Note, the work directory is suffixed with _bill to distinguish it from the joe work directory. --> <ContextManager debug="0" workDir="work_bill" > <!-- ==================== Interceptors ==================== --> ... <!-- ==================== Connectors ==================== --> ... <!-- Apache AJP12 support. This is also used to shut down tomcat. --> <!-- @@@ This connector uses port number 8009 for it's ajp communication --> <Connector className="org.apache.tomcat.service.PoolTcpConnector"> <Parameter name="handler" value="org.apache.tomcat.service.connector.Ajp12ConnectionHandler"/> <Parameter name="port" value="8009"/> </Connector> <!-- ==================== Special webapps ==================== --> <!-- @@@ the /bill context --> <Context path="/bill" docBase="webapps/bill" debug="0" reloadable="true" > </Context> </ContextManager> </Server> |
ポートの設定が、joeとbillの設定の唯一の違いではありません。 変更しなければならない4個所には、xmlファイル中に@@@マークをつけています。 これ違いは、2つのTomcatプロセスのログやワークスペースが互いに上書きしないために必要です。
そして、-f コマンドラインオプションを使用して、2つのTomcatプロセスを起動します。
Tomcat Ver3.2では、バーチャルホストをサポートしています。実際には、バーチャルホストの設定は (直前の節で説明した)複数のJVMの設定ととても似ています。理由は簡単で、Tomcat 3.2では、それぞ れのバーチャルホストは異なるTomcatプロセスで実行されるように実装されているからです。
現在(Ver 3.2)のTomcatでは、バーチャルホストの認識には、(ApacheやNetscapeのような)Webサーバを使用しています。 Tomcatアダプタは、Webサーバのバーチャルホストサポートを使用して、あるバーチャルホストに対するリクエストを、 そのバーチャルホストのコンテキストを持っているJVMにリダイレクトします。これは、(たとえば)vhost1、vhost2という 2つのバーチャルホストがある場合に、2つのJVMを使用するということで、一方ではvhost1のコンテキストが動作し、もう 一方ではvhost2のコンテキストが動作します。これらのJVMは互いに他方の存在を知らないので、実際には、それらはバー チャルホストの概念を認識しているわけではありません。すべてのバーチャルホストのロジックは、Webサーバのアダプタ 内に閉じています。よりはっきりさせるために、次のApache-Tomcatコンフィグレーションを見てください。
###################################################################### # Apache Tomcat Virtual Hosts Sample Configuration # ###################################################################### LoadModule jserv_module modules/ApacheModuleJServ.dll <IfModule mod_jserv.c> ApJServManual on ApJServDefaultProtocol ajpv12 ApJServSecretKey DISABLED ApJServMountCopy on ApJServLogLevel notice ApJServDefaultHost localhost ApJServDefaultPort 8007 # 1 Creating an Apache virtual host configuration NameVirtualHost 9.148.16.139 # 2 Mounting the first virtual host <VirtualHost 9.148.16.139> ServerName www.vhost1.com ApJServMount /examples ajpv12://localhost:8007/examples </VirtualHost> # 3 Mounting the second virtual host <VirtualHost 9.148.16.139> ServerName www.vhost2.com ApJServMount /examples ajpv12://localhost:8009/examples </VirtualHost> </IfModule> |
見ればわかりますが、ステップ1、2、3では、Apacheに2つのバーチャルホストを定義して、 それぞれのajpv12のURLに/examplesコンテキストをマウントしています。それぞれのajpv12の URLは、そのバーチャルホストを含んだJVMを示しています。2つのJVMの環境設定は、前の節で 解説した設定と非常によく似ていることからわかるように、2つの異なるserver.xmlファイル (それぞれのバーチャルホストプロセスのもの)が必要であり、Tomcatプロセスを-f コマンドラ イン引数で起動する必要があります。そうすれば、Apacheが異なるホスト名でアクセスされる たびに、アダプタが適切なJVMにリダイレクトするようにできるでしょう。
バーチャルホストサポートの改善の必要性
それぞれのバーチャルホストに異なるJVMを用いる実装は、非常に深刻なスケーラビリティの
問題が存在します。次のバージョンのTomcatでは、同一のTomcatのJVM上で、バーチャルホス
トをサポートすることができるようになるでしょう。
デフォルトでは、Tomcatの配布には、Tomcatをはじめて使用するユーザにも使いやすく、操作が 理解しやすい("out of the box")ことを主な目的としている簡単な設定が含まれています。 しかし、この設定はTomcatを現実のサイトで用いるためにはベストではありません。たとえば、 実際のサイトでは、性能のチューニングや、(たとえば、パスの追加のような)サイト固有のセッ ティングが必要になるでしょう。そこで、この節では、Tomcatベースのサイトを公開する前にし なければならない最初のステップについて説明します。
前の節で、簡単に使えるように起動スクリプトが用意されていると述べました。しかし、以下の ような設定が必要な場合には、スクリプトを変更しなければいけないことがあります。
tomcatスクリプトのデフォルトのJVMの設定はすべてデフォルトに頼っていて、非常に単純です。 Tomcatの性能を向上するためには、以下の点について検討してください。
Tomcatのデフォルトのserver.xmlで設定されているコネクタは、次のserver.xmlの一部で設定されている2つの コネクタを含んでいます。
<!-- (1) HTTP Connector for stand-alone operation --> <Connector className="org.apache.tomcat.service.PoolTcpConnector"> <Parameter name="handler" value="org.apache.tomcat.service.http.HttpConnectionHandler"/> <Parameter name="port" value="8080"/> </Connector> <!-- (2) AJPV12 Connector for out-of-process operation --> <Connector className="org.apache.tomcat.service.PoolTcpConnector"> <Parameter name="handler" value="org.apache.tomcat.service.connector.Ajp12ConnectionHandler"/> <Parameter name="port" value="8007"/> </Connector> |
Tomcatは、マルチスレッド化されたServletコンテナです。これはスレッドが、それぞれのリクエストを実行することを意味しています。 デフォルトでは、Tomcat3.2はリクエストが到達したときに新しいスレッドを生成し、それを起動してリクエストを処理します。 この挙動は、負荷の高いサイトにとっては、以下のような理由から問題があります。
Tomcatでスレッドプールを使用するのは簡単で、<Connector>設定で、PoolTcpConnectorを使用するだけです。 たとえば、以下のserver.xmlの一部は、ajpv12のプール化されたコネクタを定義します。
<!-- A pooled AJPV12 Connector for out-of-process operation --> <Connector className="org.apache.tomcat.service.PoolTcpConnector"> <Parameter name="handler" value="org.apache.tomcat.service.connector.Ajp12ConnectionHandler"/> <Parameter name="port" value="8007"/> </Connector> |
<!-- A pooled AJPV12 Connector for out-of-process operation --> <Connector className="org.apache.tomcat.service.PoolTcpConnector"> <Parameter name="handler" value="org.apache.tomcat.service.connector.Ajp12ConnectionHandler"/> <Parameter name="port" value="8007"/> <Parameter name="max_threads" value="30"/> <Parameter name="max_spare_threads" value="20"/> <Parameter name="min_spare_threads" value="5" /> </Connector> |
Servletオートリロードは、開発時には本当に便利です。 しかし、それは非常に(性能が低下するという点で)コストがかかるだけでなく、あるクラスローダがロードしたクラスが、 現在のクラスローダがロードしたクラスと同時に使用できない時に、あなたのアプリケーションに奇妙なコンフリクトが発生する可能性があります。
従って、クラスリロードがあなたの設定に本当に必要でないのなら、コンテキストのreloadableフラグは無効にすべきです。
このドキュメントは、以下の人物が作成しました。
[訳注: これは角瀬和博が翻訳しました。日本語訳に対するコメントは、jajakarta-report@nekoyanagi.com宛に送って下さい。]
Copyright ©1999 The Apache Software Foundation |