Webシステム

【初心者向け】サーブレットとコンテナの関係は?

サーブレットとコンテナの関係についてのサムネイル

Javaの学習をしていると、「Javaサーブレット」という言葉が出てきます。Javaサーブレットとは、Webブラウザからリクエストを受けたWebサーバのうち、業務処理を割り振る役割をするプログラムの集まりです。

また、サーブレットの学習中に「コンテナ」というワードも出てくると思います。
では、これらは一体どのような関係にあるのでしょうか。

サーブレットとコンテナの関係は?

コンテナとは、一言でJavaプログラムの実行環境のことです。
中でも、、、

● サーブレットの実行環境      ➡ サーブレットコンテナ
● JSPの実行環境           ➡ JSPコンテナ
● 上記二つの実行環境を併せ持つ   ➡ Webコンテナ
 

と言います。つまり、Webコンテナのような実行環境があることで、Webサーバ内のサーブレットは実行されるということです。

では、どんな実行環境が必要でしょうか。JavaのWebアプリケーションでいうと、Java EE/Jakarta EEの仕様に準拠した実行環境が必要です。この仕様に準拠したWebアプリケーションサーバの例として"Tomcat"という製品があります。これは、オープンソースのWebアプリケーションサーバです。

世の中にはWebコンテナのような実行環境を持つWebアプリケーションサーバが、Tomcat以外にもたくさん出回っています。

Webコンテナの役割

では、実行環境であるWebコンテナですが、実際何を行っているのでしょうか。

サーブレットにはライフサイクルがあり、そのライフサイクルをWebコンテナが管理しています。その管理を大きく分けて4つ紹介します。

初期化処理

サーブレットがクライアントからリクエストを受け取ると、サーブレットクラスのインスタンスが生成されメモリにロードされます。その際に実行される処理です。

次のサービス処理の実行に必要な初期化や、資源の獲得などを行います。

サービス処理

サーブレットに対するリクエストを処理します。

スーパークラスでは、リクエスト形式がpostの場合toPost()メソッドを、getの場合はtoGet()メソッドを呼び出すように定義されています。
ユーザ定義サーブレットでは、リクエストの形式に応じた適切なメソッドをオーバーライドします。

要求待ち

サービス処理を実行したサーブレットインスタンスは、メモリ上に常駐し、次のリクエストを待ちます。

2回目以降のリクエストでは、初期化が不要なため早く処理を行えます。

消滅処理

サーブレットインスタンスが停止する前に実行される処理です。確保している資源の開放などを行います。

まとめ

Javaのような言語で書かれたプログラムは、それを実行する環境がないと意味がありません。

コンテナは、そのプログラムをうまく管理して実行してくれるものです。

「サーブレットはプログラム」、「コンテナは実行環境であるサーバ」という風に覚えましょう。