フレサーモン難民

備忘録など ほぼ自分向けのまとめ

セッションスコープ

セッションスコープとは

リクエストスコープに保存したインスタンスはレスポンスを返した際に消えてしまうので、次のリクエスト時にもう一度同じインスタンスを使うことはできない。

スコープに保存したインスタンスを、リクエストをまたいで使うにはセッションスコープを使う。セッションスコープに保存するインスタンスの有効期間は開発者が決めることができるため、リクエストをまたいでインスタンスを利用できる。

セッションスコープの基本操作

セッションスコープの正体は javax.servlet.http.HttpSessionインスタンス。このインスタンスのメソッドを利用すればセッションスコープを操作することができる。

下のコードはJavaBeansインスタンスをセッションスコープに保存し、またセッションスコープを操作するコードの例。

Book book = new Book("エンディミオン", 657);

// HttpSessionインスタンスつまりセッションスコープの取得
HttpSession session = request.getSession();

// セッションスコープにインスタンスを保存
session.setAttribute("book", book);

// セッションスコープからインスタンスを取得
Book book = (Book) session.getAttribute("book");

// セッションスコープからインスタンスを削除
session.removeAttribute("book");

セッションスコープの取得

セッションスコープつまりHttpSessionインスタンスを取得。

HttpSession session = request.getSession();

※ javax.servlet.http.HttpSessionをimportする必要がある

セッションスコープにインスタンスを保存

session.setAttribute("属性名", インスタンス);

※第1引数はString型、第2引数はObject型。
※第2引数にはあらゆるクラスのインスタンスを指定できる。

セッションスコープからインスタンスを取得

取得するインスタンスの型 変数名 = (取得するインスタンスの型) session.getAttribute("属性名");

※getAttribute()メソッドの戻り値はObject型なので、元のインスタンスの型にキャストしないといけない。

セッションスコープにインスタンスを保存・取得するやり方は、対象インスタンスがrequestかsessionの違いなだけでメソッドや引数はリクエストスコープと同じ。

セッションスコープからインスタンスを削除

session.removeAttribute("属性名");

セッションスコープに格納されたインスタンスJSPファイルで取得

暗黙オブジェクト"session"を使用すればJSPファイルでセッションスコープが利用できる。

<%@ page language="java" contentType="text/html";
          pageEncoding="UTF-8 %>
<%@ page import="ex.Book" %>
<%
// インスタンスをセッションスコープから取得
Book b = (Book) session.getAttribute("book");
%>

<!DOCTYPE html>
~省略~
<%= b.getTitle() %>の価格は<%= b.getPrice() %>円です 
~省略~


参照:「スッキリわかるサーブレットJSP入門 第2版」