JAVA:IT TRICK

load-on-startupの利用

load-on-startupを使ってサーブレットアプリケーションの共通設定情報をロードする方法について説明します。
  • このエントリーをはてなブックマークに追加
  • Clip to Evernote
  • IT TRICK RSS

web.xmlのload-on-startup要素を使ってサーブレットアプリケーションの共通設定情報をロードする方法について説明します。

サーブレットの初期化パラメータを読み込む方法について説明しました。しかし、サーブレットは初めてのリクエスト時にインスタンス化されるため、最初のリクエストがあった時に初めて初期化パラメータを読み込むことができます。サーブレット間共通な初期化パラメータをアプリケーションロード時にアプリケーションスコープに入れておきたい場合もあります。この場合はload-on-startupを使います。

load-on-startup要素を指定すると、webアプリケーションロード時に、指定したサーブレットもインスタンス化され、サーブレット内のinit()メソッドが実行されます。以下はload-on-startupを利用してサーブレットの共通情報をアプリケーションスコープに登録するサンプルです。

load-on-startupのサンプル

このサンプルでは以下のweb.xmlでサーブレットSample50012Init.javaとSample50012.javaを定義しています。Sample50012Init.javaの定義内ではload-on-startupタグを使ってSample50012Init.javaをアプリケーションロード時に一緒にロードするサーブレットとして定義しています。

load-on-startupタグに定義している数字はロード順です。アプリケーションロード時に複数のサーブレットをロードしておく必要がある場合は、1、2、3という風にロード順番を設定します。今回はロードするサーブレットが一つしかないため、「1」を設定しています。

また、Sample50012Init.javaはリクエストを受け付けないため、servlet-mappingを定義していません。

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

	<servlet>
		<servlet-name>50012Init</servlet-name>
		<servlet-class>Sample50012Init</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>

	<servlet>
		<servlet-name>50012</servlet-name>
		<servlet-class>Sample50012</servlet-class>
	</servlet>

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

</web-app>

次にSample50012Init.javaです。サーブレットのロード時はサーブレットのinit()メソッドが実行されます。このサンプルではSample50012Init.javaのinit()メソッドでアプリケーションスコープに「キー:test」、「値:3123213123」のオブジェクトを設定しています。

Sample50012Init.java


import javax.servlet.ServletContext;
import javax.servlet.http.HttpServlet;


public class Sample50012Init extends HttpServlet {

	public void init() {

		System.out.println("load-on-startup");

		ServletContext sc = getServletContext();
		sc.setAttribute("test", "3123213123");

	}
}

最後のSample50012.javaではSample50012Init.javaのinit()メソッドで設定したオブジェクトをアプリケーションスコープから取得し、画面に表示しています。

Sample50012.java

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

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


public class Sample50012 extends HttpServlet {

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

		response.setContentType("text/html; charset=Windows-31J");
		PrintWriter out = response.getWriter();

		out.println("<html>");
		out.println("<head>");
		out.println("</head>");
		out.println("<body>");

		ServletContext sc = getServletContext();
		out.println(sc.getAttribute("test"));


		out.println("</body>");
		out.println("</html>");

	}
}