JAVA:IT TRICK

アプリケーションスコープの利用

サーブレットのアプリケーションスコープを利用する方法について説明します。
  • このエントリーをはてなブックマークに追加
  • Clip to Evernote
  • IT TRICK RSS

サーブレットのアプリケーションスコープを利用する方法について説明します。

アプリケーションスコープは、WEBアプリケーション単位のスコープです。一回このスコープに登録したオブジェクトはWEBアプリケーション内であれば、クライアントが異なっても、異なるサーブレットやJSPであってもデータが共有されます。以下はアプリケーションスコープを利用したサンプルです。

アプリケーションスコープを利用したサンプル

このサンプルではSample50004A.javaでアプリケーションスコープに「キー:test」、「値:3123213123」をセットし、Sample50004B.javaでそれを取得して出力しています。

アプリケーションスコープを利用するには、まずgetServletContext()メソッドを使ってServletContextのオブジェクトを取得します。取得したServletContextオブジェクトのsetAttribute()メソッドを使ってオブジェクトをセットします。

Sample50004A.java

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

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 Sample50004A extends HttpServlet {

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

		PrintWriter out = response.getWriter();

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

		out.println("ServletContext setting ok!");

	}
}

Sample50004B.javaではアプリケーションスコープ内のオブジェクトを取得し、出力しています。アプリケーションスコープからオブジェクトを取得するには、オブジェクトをセットする時と同様、まずServletContextオブジェクトを取得します。そして、ServletContextオブジェクトのgetAttribute()メソッドを使ってオブジェクトのキーを指定してオブジェクトを取得します。

Sample50004B.java

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

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 Sample50004B extends HttpServlet {

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

		PrintWriter out = response.getWriter();

		ServletContext sc = getServletContext();

		out.println(sc.getAttribute("test"));

	}
}

このサンプルのweb.xml定義です。

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

	<servlet>
		<servlet-name>50004A</servlet-name>
		<servlet-class>Sample50004A</servlet-class>
	</servlet>

	<servlet>
		<servlet-name>50004B</servlet-name>
		<servlet-class>Sample50004B</servlet-class>
	</servlet>

	<servlet-mapping>
		<servlet-name>50004A</servlet-name>
		<url-pattern>/50004A</url-pattern>
	</servlet-mapping>

	<servlet-mapping>
		<servlet-name>50004B</servlet-name>
		<url-pattern>/50004B</url-pattern>
	</servlet-mapping>

</web-app>

このサンプルを使ってアプリケーションスコープを試すには、まずブラウザから/50004Aにアクセスし、その後ブラウザを立ち上げなおして、/50004Bにアクセスします。この時画面にSample50004A.javaで設定した「3123213123」が表示されるはずです。異なるセッション間で異なるサーブレットで値が共有されていることが分かります。