2007 年 2 月 24 日 23 時 54 分

ServletContext と (Http)Servlet


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


最初に、ServletContext と Servlet について調べる。

・javax.servlet.ServletContext
・javax.servlet.http.HttpServlet

まずは、ServletContext だ。

ServletContext は、Web アプリケーションを表している。

Servlet コンテナは複数の Web アプリケーションを持て、
各 Web アプリケーションは、任意のパスに割り当てられる。

たとえば、/app にアプリケーションを割り当てれば、
/app 配下全体が、1 つの Web アプリケーションとなり、
http://localhost:8080/app 等の URI でアクセスできる。

ServletContext は、この URI に割り当てられた、
Web アプリケーションを表しているインタフェースだ。
このインタフェースを実装するクラスは、
Servlet コンテナが用意して提供する。

このクラスのインスタンスは、
通常、Web アプリケーションごとに 1 つだけ存在し、
アプリケーション起動中はずっと存在し続ける。

例えば、無停止で稼動し続けている Java サーバなら、
インスタンスが作成されてから、
5 年とかの月日が経過している可能性もあるのだ。

つまり、ServletContext の寿命は、
Web アプリケーションを停止するまでの間である。

次に、HttpServlet だ。

HttpServlet は Web サーブレットを表している。

HttpServlet は Servlet インタフェースを拡張したものだ。
Web ベースの Servlet コンテナを使う場合、
Servlet と HttpServlet はほぼ同義である。

Web アプリケーション (ServletContext) は、
複数の Web サーブレットを持つことができる。
各 Servlet は、任意の URL パターンに割り当てられる。

Web アプリケーションにリクエストが到着すると、
その URL と Servlet の URL パターンが比較され、
該当した Servlet にリクエストの処理が委託される。

例えば、Struts 1.x は Web サーブレットの 1 実装であり、
通常は「*.do」という URL パターンに割り当てられる。

「/app」Web アプリケーションに、
Struts(HttpServlet)を関連付け、
「*.do」という URL パターンに割り当てると、
http://localhost:8080/app/login.do などの URL は、
/app 配下の Struts に処理が任されることとなる。

さて、HttpServlet インタフェースを実装するクラスは、
Servlet 開発者が自分で実装して用意し、
設定ファイルを使って Web アプリケーションに登録する。

これらクラスのインスタンスも、
アプリケーションを停止させない限りは存在し続ける。
つまり、(Http)Servlet の寿命も、
Web アプリケーションを停止するまでの間である。

HttpServlet からは、HttpServlet#getServletContext() で、
自分の関連付けられている Web アプリケーションを表す、
ServletContext インスタンスを取得することができる。



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