JAVA:IT TRICK

セッションスコープの利用

サーブレットでセッションにデータを格納したり取得したりする方法について説明します。
  • このエントリーをはてなブックマークに追加
  • Clip to Evernote
  • IT TRICK RSS

サーブレットでセッションにデータを格納したり取得したりする方法について説明します。

セッションとは、ショッピングサイトやユーザ認証が必要なサイトで状態を保持する仕組みが利用されています。このユーザごとの状態を保持する仕組みはセッションと呼ばれます。

サーブレットでは、セッションはjavax.servlet.httpSessionインタフェースを使って扱います。以下は実際セッションを利用したサンプルです。

セッションの利用サンプル

このサンプルでは画面をリロードするたびにカウンターの数字が1つずつ上がっていきます。つまり、リクエストをまたいでカウンターの数字が保持され、毎回プラス1されています。

セッションからデータを取得するにはHttpServletRequestクラスのgetSession()メソッドからまずセッションのオブジェクトを取得し、セッションオブジェクトのgetAttribute()メソッドを使ってデータのキーを指定して取得します。

また、セッションにデータをセットするにはセッションオブジェクトのsetAttribute()メソッドを使ってデータのキーと値をペアでセットします。

Sample48149.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;
import javax.servlet.http.HttpSession;


public class Sample48149 extends HttpServlet {

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

		PrintWriter out = response.getWriter();

		// HttpSessionオブジェクトの取得
		HttpSession session = request.getSession();

		// セッションからcountを取得
		Integer count = (Integer)session.getAttribute("count");

		// カウントの加算
		if(count == null) {
			count = new Integer(0);
		}
		count = new Integer(count.intValue() + 1);

		// countをセッションに格納
		session.setAttribute("count", count);

		out.println("count:" + count);

	}
}

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

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

	<servlet>
		<servlet-name>48149</servlet-name>
		<servlet-class>Sample48149</servlet-class>
	</servlet>

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

</web-app>
このサンプルを実行すると初回は「count:1」と表示されますが、ブラウザをリロードするたびにカウントがプラス1されていることがわかります。

このサンプルでは利用していませんが、セッションの中の特定のオブジェクトを削除するにはHttpSessionインタフェースのremoveAttribute()メソッドを使います。また、セッションに登録されているオブジェクトの一覧を取得するにはHttpSessionインタフェースのgetAttributeNames()メソッドを使います。