JSPの基本的な機能を理解するキーは、JSPが従うライフサイクルを理解することです。
JSPライフサイクルはservletのライフサイクルに似て、作成されてから破棄されるまでの全過程です。その違いは、JSPのライフサイクルにはJSPファイルのservletへのコンパイルも含まれることです。
下記のは、JSPライフサイクルのフェーズです。
- コンパイルフェーズ:
servletコンテナは、servletソースファイルをコンパイルし、servletクラスを生成します。 - 初期化フェーズ:
JSPに対応するservletクラスをロードし、そのインスタンスを作成して、その初期化メソッドを呼び出します - 実行フェーズ:
JSPに対応するservletインスタンスのサービスメソッドを呼び出します - 破壊フェーズ:
JSPに対応するservletインスタンスのdestroyメソッドを呼び出してから、servletインスタンスを破棄します。
明らかに、JSPライフサイクルの4つの主要なフェーズは、servletのライフサイクルと非常によく似ています。下記の写真をご覧ください。
目次
JSPコンパイル
ブラウザがJSPページをリクエストする場合、JSPエンジンはまず、ファイルをコンパイルする必要があるかどうかを確認します。このファイルがコンパイルされていない場合、或は最後のコンパイル以降に変更されている場合には、JSPファイルをコンパイルします。
コンパイルプロセスには、次の3つのステップが含まれます。
- JSPファイルを分析します。
- JSPファイルをservletに変換します。
- servletをコンパイルします。
JSPの初期化
コンテナがJSPファイルをロードした後、リクエストにサービスを提供する前にjspInit()メソッドを呼び出します。カスタムのJSP初期化タスクを実行する必要がある場合は、下記が示すように、jspInit()メソッドを上書きするだけです。
public void jspInit(){
// 初期化コード
}
プログラムは1回だけ初期化され、servletも同じです。 通常、jspInit()メソッドでデータベース接続を初期化し、ファイルを開く、クエリテーブルを作成できます。
JSP実行
このフェーズでは、リクエストが破棄されるまで、JSPライフサイクルでリクエストに関連するすべてのインタラクションについて説明します。
JSPページが初期化した後、JSPエンジンは_jspService()メソッドを呼び出します。
_jspService()メソッドには、パラメータとしてHttpServletRequestオブジェクトとHttpServletResponseオブジェクトが必要です。
void _jspService(HttpServletRequest request,
HttpServletResponse response)
{
// サーバー側の処理コード
}
_jspService()メソッドは、各リクエストで1回呼び出され、対応するresponseを生成します。また、GET、POST、DELETEなどの7つのHTTPメソッドすべての応答を生成します。
JSPクリーンアップ
JSPライフサイクルの破棄フェーズでは、JSPページがコンテナから削除された時に発生したことを説明します。
jspDestroy()メソッドは、JSPのservletのdestroyメソッドと同じです。 データベース接続の解放やフォルダのクローズなどのクリーンアップ作業を実行する必要がある場合、jspDestroy()メソッドを上書きします。
jspDestroy()メソッドの構文は次のとおりです。
public void jspDestroy()
{
// コードをクリーンアップする
}
実例
JSPライフサイクルコードの実例は次のとおりです。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<title>life.jsp</title>
</head>
<body>
<%!
private int initVar=0;
private int serviceVar=0;
private int destroyVar=0;
%>
<%!
public void jspDestroy(){
destroyVar++;
System.out.println("jspDestroy(): JSPが破棄された"+destroyVar+"次");
}
%>
<%
serviceVar++;
System.out.println("_jspService(): JSPは"+serviceVar+"回のリクエストに応答した");
String content1="初期化の回数 : "+initVar;
String content2="リクエストに応答する回数 : "+serviceVar;
String content3="破壊の回数 : "+destroyVar;
%>
<h1>初心者チュートリアル JSPテスト実例</h1>
<p><%=content1 %></p>
<p><%=content2 %></p>
<p><%=content3 %></p>
</body>
</html>
ブラウザでページを開き、出力結果は次のようになります。
初心者チュートリアル JSPテスト実例
初期化の回数 :1
リクエストに応答する回数 :1
破壊の回数 :0
コメントを残す