ノート
参照 2147 最終更新 2008-01-19 (土) 17:16:45
サーブレットとかTomCatとかを勉強しなければならなくなって、
整理のために書いているメモ。
予備知識 †
- 静的(Static)ページ vs 動的(Dynamic)ページ
既にページデータがある(固定化されている)ものを表示するのが「静的」。
ページデータをその場で作って表示するのが「動的」。
- CGI (Common Gateway Interface)
静的ページを表示するWebサーバー(たとえばApache)で、
動的なページを供給するためのバックエンドプログラムを置きたいとすると、
そのバックエンドとWebサーバーとの間のインターフェース(API)のこと。
これはおそらく不正確で、Apacheが静的ページのみを意図して作られているとは言えず、
CGIを経由した動的ページ供給の意図もおそらく当初からあったのだろう。だからCGIは
Apacheまたはそれに類するWebサーバーでのバックエンドプログラムとWebサーバーの間の
インターフェース。
実体としては、ApacheはWebクライアントからの要求を受信し、動的ページの場合は
バックエンドプログラムを(デフォルトでは)プロセスとして起動するらしい。
そのプロセスにクライアントから受信した入力データを渡すことと、
バックエンドプログラムが処理した出力を受取ってWebクライアントに送信すること、が
Apacheの仕事になる。このApacheとバックエンドプログラムの間のデータのやり取りの
インタフェースがCGIと呼ばれている。
バックエンドプログラムをプロセスとして起動する(プロセスを作る)処理は結構時間がかかるらしい。
- サーブレット
正式にはJavaサーブレット。Javaには単独で動かす(他の言語でのプログラムのような)
使い方のほか、Web上で、クライアント(ブラウザ)側で動かす「アプレット」と、
Webサーバー側で動かす「サーブレット」がある。CGIの後ろでバックエンドプログラム
として動くのは「サーブレット」(という認識でいいのだと思う)。
次に見てみるように、サーブレットを動かす環境としてApache等のCGIの後ろ、という
だけでなく、「サーブレットコンテナ」(またはコンテイナ、container)
と呼ばれるものがある。要するに、CGIの時と同様に、そのページにアクセスが来ると、
サーブレットを起動し(正確にはApache等の場合と違ってサーブレットは常時起動状態
で待機していて、アクセスが来るとデータを渡されるだけらしい)、処理をさせて
出力をブラウザに返すという役割を果たすのだろう。
- JAR (Java ARchive)
複数のファイル(コンパイルされたJavaコードおよびそれが使うイメージファイルなど)をZIPでまとめたファイル。通常のZIPと同じ(ZIPで解凍できる)だが、内容に制御メタ情報(META-INF/ディレクトリ内にマニフェストと呼ばれるメタ情報が格納されている)が含まれ、このメタ情報をJARを扱うJavaのツールが解釈する点が、ZIPと異なる。まとめられるという利点のほか、アプレットなどではロード時のアクセスが1回で済む(ので高速)という利点がある。
TomCat †
- 上記「サーブレットコンテナ」の実装の1つ。サーブレットの入れ物で、ネットとのインタフェースなどをする??
- サーブレットコンテナとサーブレット(=バックエンドのプログラム)との間の
やり取りは、CGIの時と同様に、ある約束があるらしい。Javaサーブレットの規約
とJSP (JavaServer Pages=HTMLファイルで、中にJavaのプログラムコードが埋め込まれているページ、拡張子.jsp)の規約が決められているらしい。TomCatはこの規約を守った
実装の1つと書いてある。
- TomCatのディレクトリ構造は、
Struts †