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()メソッドが呼び出されます。