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>
Code Demo.jspの説明
Code ライン1: html開始タグ
Code ライン2: ヘッドタグ
Code 3~4行目: タイトル タグ、つまりデモ JSP と終了ヘッド タグ
Code 5~6行目: 変数デモを初期化するスクリプトレットタグ
Code 7~8行目: body タグ内、出力に出力されるテキスト (カウントは: )
Code ライン9: インクリメントされた値で変数デモバーを出力しようとするスクリプトレット タグ
Code 10~11行目: 本文タグと HTML タグが閉じられている
デモ JSP ページは、以下のコードで demo_jsp サーブレットに変換されます。
Code Demo_jsp.javaの説明
Code ライン1: サーブレット クラス Demon_jsp は親クラス HttpServlet を拡張しています
Code 2~3行目: HttpServletRequest オブジェクトと HttpServletResponse オブジェクトをパラメータとして持つ jsp のサービス メソッド、つまり _jspservice をオーバーライドします。
Code ライン4:開封方法
Code ライン5: メソッドの呼び出し getWriter() レスポンスオブジェクトからプリントを取得するWriterオブジェクト(オブジェクトの書式設定された表現をテキスト出力ストリームに出力します)
Code ライン6: レスポンスオブジェクトのsetContentTypeメソッドを呼び出してコンテンツタイプを設定します
Code ライン7:使用 write() 印刷方法Writer HTMLを解析しようとしているオブジェクト
Code ライン8: デモ変数変数を 0 に初期化しています
Code ライン9: 呼び出し write() 印刷方法Writer テキストを解析するオブジェクト
Code ライン10: 呼び出し print() 印刷方法Writer オブジェクトは変数 demovar を 0+1=1 からインクリメントします。したがって、出力は 1 になります。
Code ライン11:使用 write() 印刷方法Writer HTMLを解析しようとしているオブジェクト
出力:
- ここで、スクリーンショットでは、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()(NAIST) と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()データベース接続を解放したり、開いているファイルを閉じたりするなどのクリーンアップを実行するときにメソッドを使用します。



