2007 年 2 月 24 日 0 時 0 分

Servlet コンテナと Servlet


このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。


Servlet の持つ機能について考えるには、
Servlet コンテナが果たす役割を知る必要がある。

Servlet コンテナには色々な製品があるが、
オープンソース市場で広く使われている、
Apache Tomcat が有名どころである。

Tomcat をはじめとする HTTP 用の Servlet コンテナは、
HTTP サーバとして機能し、HTTP 通信を理解する力を持つ。
基本的には、Apache (Httpd) 等の Web サーバと同じだ。

Servlet コンテナが、汎用的な Web サーバと異なるのは、
リクエストを自分で処理せず、Servlet に委任する点である。
Servlet コンテナは、設定ファイルの内容に従って、
Servlet を実装したクラスのインスタンスを作成する。
そして、HTTP のリクエストを受け取ると、
インスタンスの適切なメソッドを呼び出すのである。

委任方法は、Java のインタフェースで取り決められており、javax.servlet.Servlet インタフェースとして規格がある。

本来、HTTP の通信自体はシンプルなものだ。
極端な話、HTTP のリクエストを InputStream、
レスポンスを OutputStream として捉えることもできるのだ。
(これは CGI のイメージに近い)

しかし、これではあまりにも生産性が低いため、
javax.servlet.Servlet インタフェースはもっと高度である。

Servlet コンテナは、HTTP の通信を受け取ると、
オブジェクト指向の Java で扱えるように変換し、
Servlet 実装者が簡単に処理を書けるように考慮されている。

少し、javax.servlet.Servlet インタフェースを見てみよう。
このインタフェースには、リクエストを処理するメソッド
service() が存在し、以下のようなシグネチャを持つ。

void service(ServletRequest req, ServletResponse res)

まだクラスの中身は覗いていないが、
このシグネチャを見るだけでも、
Servlet が通信をオブジェクトとして表現した、
高水準な枠組みであることが分かる。

明日は、Servlet インタフェースに関連する、
主要クラスとその位置づけを考えてみよう。



Copyright (c) 1994-2007 Project Loafer. All rights reserved.