JakartaEE サーブレットのライフサイクルを徹底解説!init・service・destroyの基本
生徒
「先生、JakartaEEのサーブレットってどのように動いているんですか?」
先生
「良い質問ですね、ではなく(笑)、サーブレットにはライフサイクルという仕組みがあり、起動から終了まで一定の流れで動作しています。」
生徒
「ライフサイクルって具体的にどんな流れなんですか?」
先生
「大きく分けるとinit、service、destroyの三つの段階があります。それぞれ役割が決まっていて、Webアプリケーションが安定して動作するために欠かせない仕組みです。」
生徒
「なるほど!では、一つずつ詳しく教えてください。」
1. サーブレットのライフサイクルとは?
JakartaEE サーブレットのライフサイクルとは、サーブレットがWebコンテナに読み込まれてから破棄されるまでの一連の流れを指します。リクエスト処理を効率的に行うためには、このライフサイクルの仕組みを理解することが大切です。サーブレットは常に新しいインスタンスが作られるわけではなく、同じオブジェクトが繰り返し利用されます。そのため、初期化処理・リクエスト処理・終了処理の役割が明確に分かれているのです。
2. initメソッドでの初期化処理
initメソッドは、サーブレットが最初に呼び出されるときに一度だけ実行されます。この段階ではデータベース接続の準備や設定ファイルの読み込みなど、リクエスト処理に必要な初期化作業を行います。ここで重い処理を済ませておくことで、実際のリクエスト処理を高速化できます。
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
public class MyServlet extends HttpServlet {
@Override
public void init() throws ServletException {
// 初期化処理(データベース接続や設定ファイル読み込みなど)
System.out.println("サーブレットが初期化されました");
}
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.getWriter().println("リクエスト処理中");
}
@Override
public void destroy() {
System.out.println("サーブレットが破棄されました");
}
}
3. serviceメソッドでのリクエスト処理
serviceメソッドは、クライアントからリクエストが送られてきたときに実行されます。このメソッドはHTTPリクエストの種類(GETやPOSTなど)を判別し、適切なメソッドに振り分けます。Webブラウザからのアクセスがあるたびに呼び出されるため、サーブレットの中心的な役割を担っています。
リクエスト処理中
例えばログイン処理や商品検索など、Webアプリケーションの実際の機能はこの段階で実行されます。複数のユーザーが同時にアクセスしてくる場合でも、一つのサーブレットインスタンスが効率的にリクエストを処理するように設計されています。
4. destroyメソッドでの終了処理
destroyメソッドは、サーブレットがWebコンテナから破棄される直前に一度だけ呼び出されます。この処理ではデータベース接続のクローズやファイルストリームの解放など、リソースを適切に終了させる役割を持ちます。もしこの処理を忘れるとメモリリークや接続エラーの原因になり、アプリケーション全体に悪影響を与える可能性があります。
5. ライフサイクル理解のメリット
サーブレットのライフサイクルを理解することは、初心者がJakartaEEを学ぶうえで非常に重要です。特に以下のようなメリットがあります。
- 初期化処理をまとめて効率化できる
- リクエスト処理を最適化し、応答速度を高められる
- 終了処理でリソースを適切に解放できる
Webアプリケーションは長時間稼働するため、この仕組みを無視するとパフォーマンスや安定性に問題が生じます。特に実務でJakartaEEを使う場合には、ライフサイクルを意識した設計が求められます。
6. init・service・destroyの流れをまとめてイメージする
サーブレットはWebコンテナに登録されると、まずinitで一度だけ初期化処理を行います。その後、ユーザーからのアクセスがあるたびにserviceメソッドで処理を実行し、最後にサーバー停止や再起動のタイミングでdestroyが呼ばれて終了します。この流れを理解することで、効率的で安定したWebアプリケーションを構築できるのです。