Apache と Tomcat

 Web アプリケーションに詳しくないので余り気にしていなかったのですが、良く考えると ApacheTomcat って何だろう?と思った週末。
 Google で調べてみると同じ疑問を持っている人がいました。回答を見ると、

  • Apache HTTP Server:Web サーバ。アクセス制限やバーチャルホストを利用した運用などが可能。静的なコンテンツの表示を行える。
  • Tomcatサーブレットコンテナ。Java による動的なページの生成が可能。Web サーバの機能も備えているが, Apache に比べると貧弱なので通常は Apache と連携して利用する。

 といった感じでしょうか。
 続いて Wikipedia で調べてみると、Web サーバの記事はまぁ普通ですね。クライアントにより指示された URL により, Web サーバ内に存在するコンテンツを HTTP に則って返すものです。一方サーブレットコンテナは、今では余り厳密な意味では使われていないようですが, Java を用いて Web コンテンツを動的に生成するサーバー上で動作するプログラム(サーブレット)の実行環境のことです。一般にサーブレットサーブレットアプリケーションとサーブレットコンテナが協調して動作しており, サーブレットコンテナはセッションやライフサイクルの管理を行います。Tomcat や Jetty, WebLogic, WebSphere, JBoss, Glassfish などは HTTP サーバとしての機能も備えているので, Web コンテナと呼ばれることもあるようです。

 サーブレットと同様の技術としては CGI や mod_php などがあります。サーブレットはリクエストの度に新しいプロセスを生成する CGI に比べると, メモリに常駐してスレッドを立てて動作するので軽量・高速です。mod_phpApache HTTP Server 上で PHP のプロセスを動かすモジュールです。


 Web コンテナには主に以下の 3 つの種類があり, 大抵のコンテナはこれらを切り替えて使うことが出来ます。

  • スタンドアローン型: サーブレットコンテナ自身が Web サーバを内蔵しているタイプ。
  • 内部プロセス型: Web サーバのプロセスの一部としてコンテナが動作するタイプ。Web サーバとリソースを共有するため, 高速。但しスケーラビリティに乏しい。
  • 外部プロセス型: Web サーバのプラグインと, 外部で動作するコンテナが連携するタイプ。内部プロセス型よりレスポンスは劣るが, スケーラビリティが高い。


 取り敢えずこんな感じかな。後々, Apache で出来ることや Tomcat の仕組みなんかを知りたいですね。
 ココに良く纏まった資料があるので参考になりました。