JSP の基礎となる機能を理解するための鍵は、JSP が準拠するライフ サイクルを理解することです。
JSP ライフ サイクルは、作成から破棄までのプロセス全体であり、サーブレットのライフ サイクルと似ていますが、JSP ライフ サイクルには、JSP ファイルをサーブレットにコンパイルすることも含まれるという点が異なります。
JSP ライフサイクルが通過する段階は次のとおりです。
コンパイルフェーズ:
サーブレット コンテナはサーブレット ソース ファイルをコンパイルし、サーブレット クラスを生成します。
初期化フェーズ:
JSPに対応するサーブレットクラスをロードし、そのインスタンスを作成し、その初期化メソッドを呼び出します。
実行フェーズ:
JSPに対応するサーブレットインスタンスのサービスメソッドを呼び出します。
破壊フェーズ:
JSPに対応するサーブレットインスタンスの破棄メソッドを呼び出し、サーブレットインスタンスを破棄します。
明らかに、以下に示すように、JSP ライフ サイクルの 4 つの主要な段階はサーブレットのライフ サイクルと非常によく似ています。
ブラウザが JSP ページをリクエストすると、JSP エンジンはまずファイルをコンパイルする必要があるかどうかを確認します。このファイルがコンパイルされていない場合、または前回のコンパイル以降に変更されている場合は、JSP ファイルをコンパイルします。
コンパイル プロセスは 3 つのステップで構成されます。
JSP ファイルを解析します。
JSP ファイルをサーブレットに変換します。
サーブレットをコンパイルします。
コンテナは JSP ファイルをロードした後、リクエストにサービスを提供する前に jspInit() メソッドを呼び出します。カスタム JSP 初期化タスクを実行する必要がある場合は、次のように jspInit() メソッドをオーバーライドします。
public void jspInit(){ // 初期化コード}
一般に、プログラムは 1 回だけ初期化されますが、サーブレットについても同様です。通常、データベース接続を初期化し、ファイルを開いて、jspInit() メソッドでクエリ テーブルを作成できます。
このステージでは、破棄されるまでの JSP ライフサイクルにおけるすべてのリクエスト関連の対話について説明します。
JSP Web ページの初期化が完了すると、JSP エンジンは _jspService() メソッドを呼び出します。
_jspService() メソッドには、次のような HttpServletRequest オブジェクトと HttpServletResponse オブジェクトがパラメータとして必要です。
void _jspService(HttpServletRequest request,HttpServletResponse response){ // サーバー側の処理コード}
_jspService() メソッドは、各リクエストで 1 回呼び出され、対応するレスポンスを生成する役割を果たします。また、GET、POST、DELETE などの 7 つの HTTP メソッドすべてに対するレスポンスを生成する役割も担います。
JSP ライフサイクルの破棄フェーズでは、JSP Web ページがコンテナから削除されたときに何が起こるかを説明します。
JSP の jspDestroy() メソッドは、サーブレットの破棄メソッドに相当します。データベース接続の解放やフォルダーのクローズなど、クリーンアップ作業を実行する必要がある場合は、 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 serviceVar=0; public void jspInit(){ initVar++; System.out.println("jspInit(): JSP は "+initVar+" 回初期化されました"); } public void jspDestroy(){ destroyVar++; System.out.println("jspDestroy(): JSP は破棄されました"+destroyVar+ "回"); }%><% serviceVar++("_jspService(): JSP は合計 "+serviceVar+" リクエストに応答しました"); String content1="初期化の数: "+initVar; String content2="顧客のリクエストに対する応答の数: "+serviceVar; String content3="破棄の数: " +destroyVar;%> <h1>w3cschool チュートリアル JSP テストの例</h1><p><%=content1 %></p><p><%=content2 %></p><p><%=content3 %></p></body></html>