JAVA:IT TRICK

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

ここではサーブレットのライフサイクルについて説明します。
  • このエントリーをはてなブックマークに追加
  • Clip to Evernote
  • IT TRICK RSS

ここではサーブレットのライフサイクルについて説明します。

サーブレットクラスはHttpServletクラスを継承して作成します。HttpServletクラスにはdoGet()メソッドやdoPost()メソッド以外にも様々なメソッドがあります。その中でinit()メソッドとdestroy()メソッドはサーブレットのライフサイクルに関係のあるメソッドです。このinit()メソッドとdestroy()メソッドをオーバーライドすることでサーブレットのライフサイクルを考慮したプログラムを作成することができます。また、サーブレットのライフサイクルは具体的に以下のようになっています。

サーブレットのインスタンスが生成されてアプリケーションサーバ(Tomcatなど)にロードされた時にinit()メソッドが呼ばれます。処理終了後にアプリケーションサーバからインスタンスが削除される直前にdestroy()メソッドが呼ばれます。

また、クライアントからリクエストがあった時には、servce()というメソッドが呼ばれます。リクエストによってservice()メソッド内ではHTTPリクエストメソッドのdoGet()、doPost()などのメソッドが呼ばれます。

ライフサイクルのサンプル

以下はinit()メソッド、destroy()メソッドを実装したサンプルです。このサンプルではそれぞれのメソッドが呼ばれた時に自分自身の名前をコンソールに出力しています。

Sample48108.java
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class Sample48108 extends HttpServlet {

	public void init() throws ServletException {
		System.out.println("init()");
	}

	public void doGet(HttpServletRequest request,
			HttpServletResponse response)
	throws IOException, ServletException {

		PrintWriter out = response.getWriter();
		out.println("doGet()");

		System.out.println("doGet()");

	}

	public void destroy() {
		System.out.println("destroy()");
	}

}

このサーブレットのweb.xmlでの設定です。

web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app>

	<servlet>
		<servlet-name>48108</servlet-name>
		<servlet-class>Sample48108</servlet-class>
	</servlet>

	<servlet-mapping>
		<servlet-name>48108</servlet-name>
		<url-pattern>/48108</url-pattern>
	</servlet-mapping>

</web-app>

このサンプルを実行してコンソールを見ると、最初にサーブレットを呼び出した時にinit()メソッドが呼ばれて、続けてdoGet()メソッドが呼ばれていることがわかります。以後はこのサーブレットが呼ばれるたびにdoGet()メソッドのみが呼ばれます。最後にサーバを停止して見ると、destroy()メソッドが呼ばれていることが分かります。以下は実際の実行結果です。

実行結果
init()
doGet()
doGet()
doGet()
doGet()
doGet()
destroy()