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のような言語で書かれたプログラムは、それを実行する環境がないと意味がありません。
コンテナは、そのプログラムをうまく管理して実行してくれるものです。
「サーブレットはプログラム」、「コンテナは実行環境であるサーバ」という風に覚えましょう。