JSPのライフサイクル
JSP ライフサイクルとは何ですか?
JSP ライフ サイクルは、サービス リクエストを処理するために最初に JSP ページをサーブレットに変換する必要があるため、JSP ページのサーブレットへの変換として定義されます。 ライフサイクルは JSP の作成から始まり、JSP の解体で終わります。
JSP ライフサイクルのさまざまなフェーズ
ブラウザが JSP を要求すると、JSP エンジンはまずページをコンパイルする必要があるかどうかを確認します。 JSP が最後にコンパイルされた場合、または最近の変更が JSP で行われた場合、JSP エンジンはページをコンパイルします。
JSP ページのコンパイル プロセスには、次の XNUMX つのステップが含まれます。
- JSPの解析
- JSP をサーブレットに変換する
- サーブレットのコンパイル
JSP ライフサイクル図
JSP ライフサイクルを以下の図に示します。
次の手順は、JSP のライフ サイクルを説明しています。
- JSPページの翻訳
- JSPページのコンパイル(JSPページを_jsp.javaにコンパイル)
- クラスローディング (_jsp.java がクラスファイル _jsp.class に変換されます)
- インスタンス化(生成したサーブレットのオブジェクトを作成)
- 初期化(
_jspinit()
メソッドはコンテナによって呼び出されます) - リクエスト処理(
_jspservice()
メソッドはコンテナによって呼び出されます) - 破壊する (
_jspDestroy()
コンテナによって呼び出されるメソッド)
上記の点についてさらに詳しくまとめてみましょう。
1) JSPページの翻訳:
A Java サーブレット ファイルは JSP ソース ファイルから生成されます。 これは JSP ライフサイクルの最初のステップです。 変換フェーズでは、コンテナは JSP ページとタグ ファイルの構文の正しさを検証します。
- JSP コンテナは、この JSP ページで使用される標準のディレクティブとアクション、およびタグ ライブラリを参照するカスタム アクション (これらはすべて JSP ページの一部であり、後のセクションで説明します) を解釈します。
- 上の図の説明では、最初のステップで、demo.jsp が demo_jsp.java に変換されます。
- 以下に示す「demo.jsp」の例を見てみましょう。
デモ.jsp
<html> <head> <title>Demo JSP</title> </head> <% int demvar=0;%> <body> Count is: <% Out.println(demovar++); %> <body> </html>
Demo.jspのコード説明
コード行 1: html開始タグ
コード行 2: ヘッドタグ
コード行 3 ~ 4: タイトル タグ、つまりデモ JSP と終了ヘッド タグ
コード行 5 ~ 6: 変数デモを初期化するスクリプトレットタグ
コード行 7 ~ 8: body タグ内、出力に出力されるテキスト (カウントは: )
コード行 9: インクリメントされた値で変数デモバーを出力しようとするスクリプトレット タグ
コード行 10 ~ 11: 本文タグと HTML タグが閉じられている
デモ JSP ページは、以下のコードで demo_jsp サーブレットに変換されます。
Demo_jsp.java のコードの説明
コード行 1: サーブレット クラス Demon_jsp は親クラス HttpServlet を拡張しています
コード行 2 ~ 3: HttpServletRequest オブジェクトと HttpServletResponse オブジェクトをパラメータとして持つ jsp のサービス メソッド、つまり _jspservice をオーバーライドします。
コード行 4:開封方法
コード行 5: メソッドの呼び出し getWriter()
応答オブジェクトから PrintWriter オブジェクトを取得します (オブジェクトのフォーマットされた表現をテキスト出力ストリームに出力します)
コード行 6: レスポンスオブジェクトのsetContentTypeメソッドを呼び出してコンテンツタイプを設定します
コード行 7:使用 write()
HTML を解析しようとする PrintWriter オブジェクトのメソッド
コード行 8: デモ変数変数を 0 に初期化しています
コード行 9: 呼び出し write()
テキストを解析するPrintWriterオブジェクトのメソッド
コード行 10: 呼び出し print()
PrintWriterオブジェクトのメソッドを使用して、変数demovarを0+1=1に増加します。したがって、出力は1になります。
コード行 11:使用 write()
HTML を解析しようとする PrintWriter オブジェクトのメソッド
出力:
- ここで、スクリーンショットでは、demvar が 1 に初期化され、その後 0+0=1 に増分されるため、出力が 1 であることがわかります。
上記の例では、
- demo.jsp は、XNUMX つの変数が初期化されてインクリメントされる JSP です。 この JSP はサーブレット (demo_jsp.class ) に変換され、JSP エンジンは JSP ページをロードしてサーブレット コンテンツに変換します。
- 変換が行われると、すべてのテンプレートテキストは次のように変換されます。
println()
声明など JSP要素 に変換されます Java コード。
これは、単純な JSP ページがサーブレット クラスに変換される方法です。
2) JSPページのコンパイル
- 生成された Java サーブレット ファイルは Java サーブレット クラスにコンパイルされます。
- Java ソース ページの実装クラスへの変換は、JSP ページのコンテナへのデプロイメントと JSP ページの処理の間のいつでも実行できます。
- 上の図の説明では、demo_jsp.java はクラス ファイル demo_jsp.class にコンパイルされます。
3) クラスローディング
- JSPソースからロードされたサーブレットクラスがコンテナにロードされるようになりました
4) インスタンス化
- このステップでは、オブジェクト、つまりクラスのインスタンスが生成されます。
- コンテナーは、リクエストやその他のイベントへの応答として、このクラスの XNUMX つ以上のインスタンスを管理します。 通常、JSP コンテナはサーブレット コンテナを使用して構築されます。 JSP コンテナはサーブレット コンテナの拡張であり、コンテナは JSP とサーブレットの両方をサポートします。
- コンテナによって提供されるJSPPageインターフェースは、
init()
およびdestroy()
方法。 - HTTP リクエストを処理するインターフェイス HttpJSPPage があり、サービス メソッドも含まれています。
5) 初期化
public void jspInit() { //initializing the code }
_jspinit()
メソッドは、JSP から生成され、このフェーズでコンテナによって呼び出されるサーブレット インスタンスを開始します。- インスタンスが作成されると、その直後に init メソッドが呼び出されます。
- これは JSP ライフサイクル中に XNUMX 回だけ呼び出され、初期化のメソッドは上記のように宣言されます。
6) リクエスト処理
void _jspservice(HttpServletRequest request HttpServletResponse response) { //handling all request and responses }
_jspservice()
メソッドは、JSPページのライフサイクル中に発生したすべてのリクエストに対してコンテナによって呼び出されます。- このフェーズでは、上記のすべてのフェーズを通過する必要があり、その後サービス メソッドのみを呼び出すことができます。
- リクエストとレスポンスのオブジェクトを渡します
- このメソッドはオーバーライドできません
- メソッドは上に示されています。GET、POST など、すべての HTTP メソッドの生成を担当します。
7) 破壊する
public void _jspdestroy() { //all clean up code }
_jspdestroy()
メソッドはコンテナによっても呼び出される- このメソッドは、コンテナがリクエストを処理するためにサーブレット インスタンスが不要になったと判断したときに呼び出されます。
- destroy メソッドの呼び出しが行われると、サーブレットはガベージ コレクションの準備が整います。
- これがライフサイクルの終わりです。
- 上書きできる
jspdestroy()
データベース接続を解放したり、開いているファイルを閉じたりするなどのクリーンアップを実行するときにメソッドを使用します。