サーブレットのライフサイクル

サーブレットのライフサイクルは、サーブレットコンテナによって管理されます。ライフサイクルは5つの段階に要約できます:
  1. Load Servlet class
  2. Create Servlet instance
  3. Call method init()
  4. メソッドを呼び出します service()
  5. メソッドを呼び出します destroy()
ステップ 1、2、3 は、サーブレットがロードされたときに 1 回だけ実行されます。デフォルトでは、サーブレットは最初の要求が受信されるまでロードされません。サーブレットコンテナの実行中に、サーブレットコンテナにサーバを強制的にロードさせることができます。
Step 4 is run multiple times times リクエスト HTTP.
ステップ 5 は、サーブレットコンテナがサーブレットを破棄するときに実行されます。

これはサーブレットのライフサイクルを表すアルゴリズムです:

サーブレットのライフサイクル

手順を以下で詳しく説明します:

サーブレットクラスをロードします

まず、サーブレットを呼び出すために、 サーブレット・コンテナーは、サーブレット・クラスをロードする必要があります。これは他のクラスと同様に行われます.

Create Servlet instance

クラスがロードされたので、コンテナは新しいサーブレットインスタンスを作成します。通常、インスタンスは 1 つだけ作成され、リクエスト は、同じサーブレット・インスタンスで処理されます。それは、サーブレットコンテナが決定しますが、一般的にはインスタンスは1つしかありません.

call init()

メソッドinit() は一度だけ呼び出されるように設計されています。インスタンスが作成されると、init() が呼ばれます。.これにより、最初の要求が処理される前にサーブレットを初期化できます。サーブレット初期化パラメータは、web.xml.

init() メソッドのようになります:

public void init() throws ServletException {
// 初期化...
}

call service()

受信したリクエストごとに、サーバーは新しいスレッドを作成し、メソッドを実行しますservice()です。メソッド service()はHTTPリクエストのタイプ(GET、POST、PUT、DELETEなど)をチェックし、対応するメソッドdoGet、doPost、doPut、doDeleteなどを呼び出します。サーブレットがアクティブである限り、メソッド service() を再度呼び出すことができます。したがって、このステップは複数回実行されるため、サーブレットのライフサイクルで最も長いステップになる可能性があります。

このメソッドの宣言は次のとおりです。

public void service(ServletRequest request, 
ServletResponse response)
throws ServletException, IOException{
}
メソッド doGet() および doPost() は、到着するたびに頻繁に使用されます。依頼。これがステートメントです 両方のメソッドの.

doGet()

GET リクエストは、メソッドが定義されていない URL または HTML フォームで作成され、doGet() で処理する必要があります。

public void doGet(HttpServletRequest request,
HttpServletResponse response))
は ServletException をスローします。 IOException {
// code
}

doPost()

La  メソッドクエリ POSTはHTMLフォームで作成され、doPost().

public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// サーブレットコード
}

destroy ()

メソッド<を呼び出すspan style="font-family: Courier New, Courier, minivan;">destroy() は、サーブレットのライフサイクルの最後に一度だけ呼び出されます。このメソッドを使用すると、接続を閉じたり、スレッドを停止したり、Cookieリストを保存したりできます.
After destory() が呼ばれると、サーブレットオブジェクトは破棄されます。メソッド destory() は次のようになります:

public void destroy() {
// ファイナライズコード...
}