JSPのライフサイクル


JSP の基礎となる関数を理解する鍵は、それらが準拠するライフ サイクルを理解することです。

JSP ライフ サイクルは、サーブレットのライフ サイクルと同様に、作成から破棄までのプロセス全体です。違いは、JSP ライフ サイクルには、JSP ファイルをサーブレットにコンパイルすることも含まれることです。

JSP ライフサイクルが通過する段階は次のとおりです:

  • コンパイルフェーズ:

    サーブレットコンテナはサーブレットソースファイルをコンパイルし、サーブレットクラスを生成します

  • 初期化フェーズ:

    ロードと JSPに対応するサーブレットクラスがインスタンスを作成し、その初期化メソッドを呼び出す

  • 実行フェーズ:

    JSPに対応するサーブレットインスタンスのサービスメソッドを呼び出す

  • 破棄フェーズ:

    JSP に対応するサーブレット インスタンスの破棄メソッドを呼び出して、サーブレット インスタンスを破棄します

明らかに、JSP ライフ サイクルの 4 つの主要な段階は、サーブレット ライフ サイクルと非常に似ています。以下の図に示します。 :

jsp_life_cycle.jpg


JSP コンパイル

ブラウザが JSP ページをリクエストすると、JSP エンジンはまずこのファイルをコンパイルする必要があるかどうかを確認します。このファイルがコンパイルされていない場合、または前回のコンパイル以降に変更されている場合は、JSP ファイルをコンパイルします。

コンパイル プロセスには 3 つのステップが含まれます:

  • JSP ファイルを解析します。

  • JSP ファイルをサーブレットに変換します。

  • サーブレットをコンパイルします。


JSP の初期化

コンテナは JSP ファイルをロードした後、リクエストにサービスを提供する前に jspInit() メソッドを呼び出します。カスタム JSP 初期化タスクを実行する必要がある場合は、次のように jspInit() メソッドをオーバーライドするだけです:

public void jspInit(){
  // 初始化代码
}

一般に、プログラムは 1 回だけ初期化されますが、サーブレットについても同様です。通常、データベース接続を初期化し、ファイルを開いて、jspInit() メソッドでクエリ テーブルを作成できます。


JSP 実行

このフェーズでは、破棄されるまでの JSP ライフサイクルにおけるすべてのリクエスト関連の対話について説明します。

JSP Web ページの初期化が完了すると、JSP エンジンは _jspService() メソッドを呼び出します。

_jspService() メソッドは、次のような HttpServletRequest オブジェクトと HttpServletResponse オブジェクトをパラメータとして必要とします。

void _jspService(HttpServletRequest request,
                 HttpServletResponse response)
{
   // 服务端处理代码
}

_jspService() メソッドはリクエストごとに 1 回呼び出され、対応するレスポンスを生成する役割を果たします。 GET、POST、DELETE などの 7 つの HTTP メソッドすべてに対する応答を生成します。


JSP クリーンアップ

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 initVar=0;
  private int serviceVar=0;
  private int destroyVar=0;
%>
  
<%!
  public void jspInit(){
    initVar++;
    System.out.println("jspInit(): JSP被初始化了"+initVar+"次");
  }
  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>php中文网 JSP 测试实例</h1>
<p><%=content1 %></p>
<p><%=content2 %></p>
<p><%=content3 %></p>

</body>
</html>

ブラウザがページを開き、出力結果は次のとおりです:

E80496E2-35DF-439F-8A43-6376D92DFA45.jpg