JSPライフサイクルの理解 - 初期化、実行、破棄

JSPのライフサイクルは、Servletと同様にWebコンテナによって管理されます。本稿では、JSPファイルの初期化、実行、破棄の各フェーズについて詳しく解説します。

JSPの初期化

WebコンテナがJSPファイルをロードした後、最初のリクエストを処理する前にjspInit()メソッドが呼び出されます。カスタムな初期化処理が必要な場合は、このメソッドをオーバーライドしてください。

public void jspInit(){
  // 初期化処理
}

通常、この初期化処理はアプリケーションの起動時に一度だけ実行されます。jspInit()メソッド内では、データベース接続の取得、ファイルハンドルのオープン、テーブル构造の初期化といったタスクを実行するのが一般的です。

JSPの実行

実行フェーズでは、JSPファイルに対するリクエストの処理が行われます。このフェーズは、JSPページが破棄されるまで続きます。

初期化が完了した後、JSPエンジンは_jspService()メソッドを呼び出します。このメソッドはHttpServletRequestオブジェクトとHttpServletResponseオブジェクトをパラメータとして受け取ります。

void _jspService(HttpServletRequest request,
                 HttpServletResponse response)
{
   // リクエスト処理コード
}

_jspService()メソッドは每一次のリクエストごとに呼び出され、対応するレスポンスを生成します。このメソッドはGET、POST、DELETE、PUTなどのすべてのHTTPメソッドの処理を 담당합니다。

JSPの破棄

破棄フェーズでは、JSPページがWebコンテナからアンロードされる際に必要なクリーンアップ処理を実行します。

jspDestroy()メソッドは、Servletのdestroy()メソッドと同等の役割を果たします。データベース接続の解放、ファイルハンドルのクローズ、リソースの解放などのクリーンアップ処理が必要な場合は、このメソッドをオーバーライドしてください。

public void jspDestroy()
{
   // クリーンアップ処理
}

実践例

以下の例は、JSPライフサイクルの各フェーズを示すものです。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<head>
<title>lifecycle.jsp</title>
</head>
<body>

<%! 
  private int initCounter=0;
  private int requestCounter=0;
  private int destroyCounter=0;
%>
  
<%!
  public void jspInit(){
    initCounter++;
    System.out.println("jspInit(): JSPの初期化回数 = " + initCounter);
  }
  public void jspDestroy(){
    destroyCounter++;
    System.out.println("jspDestroy(): JSPの破棄回数 = " + destroyCounter);
  }
%>

<%
  requestCounter++;
  System.out.println("_jspService(): リクエスト処理回数 = " + requestCounter);

  String info1 = "初期化回数: " + initCounter;
  String info2 = "リクエスト処理回数: " + requestCounter;
  String info3 = "破棄回数: " + destroyCounter;
%>
<h1>JSP ライフサイクル デモ</h1>
<p><%= info1 %></p>
<p><%= info2 %></p>
<p><%= info3 %></p>

</body>
</html>

この例では、3つのプライベート変数を定義し、それぞれ初期化回数、リクエスト処理回数、破棄回数をカウントしています。jspInit()メソッドでは初期化カウンターを、jspDestroy()メソッドでは破棄カウンターを、_jspService()メソッドではリクエスト処理カウンターをインクリメントしています。

ブラウザでこのJSPファイルにアクセスすると、各カウンターの状態が画面に表示されます。ページをリロードするたびにリクエスト処理回数が 증가し、サーバーを停止的时候会调用jspDestroy()メソッドが呼び出されます。

タグ: JSP Servlet java-ee web-container Lifecycle

6月29日 23:45 投稿