Servlet のコーディング

Revised: 11th/June/2002

サーブレットのパッケージ

サーブレットは、 Java の拡張パッケージ javax.servlet のメンバを使ってコーディングする。

あるクラスが Web サーバ上でサーブレットとして機能するためには、 Servlet インタフェースを実装するか、実装クラスを継承しなければならない。 javax.servlet.Servlet インタフェースは javax.servlet.GenericServlet 抽象クラスで実装されており、これを継承すれば Servlet インタフェースで宣言されたメソッドを実装する必要はなくなる。これを更に継承して HTTP 固有のメソッドを実装したものが javax.servlet.http.HttpServlet クラスであり、普通はこれを継承してサーブレットを記述する。

クライアント要求と応答はオブジェクトとして扱われる。サーブレットは、クライアント要求を ServletRequest インタフェース型オブジェクトにカプセル化して受け取り、応答は ServletResponse インタフェース型オブジェクトにカプセル化して受け渡すことになる。要求/応答をインスタンス化することは無いので、具体的な実装クラスを自分で定義する必要はない。これを継承して HTTP 固有のメソッドを宣言したインタフェースが javax.servlet.http.HttpServletRequest / javax.servlet.http.HttpServletResponse であり、普通はこのインタフェース型にカプセル化して要求/応答を受け取る。要求/応答をオブジェクトとして扱うことで、サーブレット、 JSP、 Bean 間で受け渡すことが可能になり、処理を委譲することができます。

サーブレットのライフサイクル

サーブレットにも、アプレットと似たようなライフサイクルがあります。それらは、javax.servlet.Servlet インタフェースの init(), service(), destroy() で表現されており、全てのサーブレットは、これらを実装する必要がある。

このインタフェースを実装した抽象クラスである javax.servlet.GenericServlet, javax.servlet.http.HttpServlet を継承すれば、直接実装する義務はなくなる。

init(ServletConfig config)

public void init(ServletConfig config)
             throws ServletException

サーブレットコンテナがサーブレットの初期化時に呼ぶ。オーバーライドするときは、内部で super.init(config) も呼んで通常の処理もさせる必要がある。

service(ServletRequest req, ServletResponse res)

public void service(ServletRequest req, ServletResponse res)
             throws ServletException, java.io.IOException

サーブレットがクライアントの要求に応答するときに、サーブレットコンテナに呼ばれる。javax.servlet.http.HttpServlet を実装していれば、HTTP の標準的な要求は doGet(), doPost() などのメソッドで扱えるので、 service() メソッドをオーバーライドすることはない。

destroy()

public void destroy()

メモリ上のサーブレットのインスタンスが破壊されるときに、サーブレットコンテナに呼ばれる。終了作業が必要なときにオーバーライドする。

サーブレットのパス

サーブレットは *.java ファイルで作成し、サーバには javac でコンパイルした *.class ファイルを用意しておきます。このファイルを Web Application の一部と認識させるために、サーバのコンテキスト・ルートには web.xml ファイルを作成します。

web.xml は Deployment Deplicator と呼ばれ、サーブレットのクラスファイルの所在をアプリケーションサーバに知らせる働きを持ちます。

Sun Microsystems のサーブレット仕様では、サーブレットのファイルは、ドキュメント・ルートとして指定したフォルダの中の /WEB-INF/classes/ の中に配備します。これを参照するサーブレット名を /WEB-INF/web.xml に記述することになります。このあたりの実装は、サーバ製品によって異なるので、製品ごとの仕様の確認が必要ですが、 Tomcat は Sun Microsystems の Servlet Specification に従っています。



Copyright © 2002 SUGAI, Manabu. All Rights Reserved.
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送