次に、セッションによる情報の引き継ぎを見てみることにしましょう。session1.jsp(リスト3)で保存されたセッション情報を、session2.jsp(リスト4)から参照します(図4)。
リスト3:session1.jsp
<%@ page contentType="text/html;charset=Windows-31J" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>セッション情報を制御する</title>
</head>
<body>
<c:set var="sample" value="セッション情報" scope="session" /> (1)
セッション情報を記録しました。
</body>
</html>
リスト4:session2.jsp
<%@ page contentType="text/html;charset=Windows-31J" %>
<html>
<head>
<title>セッション情報を制御する</title>
</head>
<body>
セッション"sample" => ${sessionScope['sample']} (2)
</body>
</html>

図4:session1.jspで入力した値をsession2.jspで引き継ぐ (画像をクリックすると別ウィンドウに拡大図を表示します)
セッション情報をセットするのは、<c:set>要素の役割です(リスト3の1)。<c:set>要素についてはすでに説明しましたが、セッション情報を設定する場合にはscope属性を明示する必要がある点に注意してください。scope属性は変数の有効範囲を示すためのパラメータで、表1に示したような値を指定することができます。
スコープ |
概要 |
page |
現在のページのみ有効 |
request |
一連のリクエスト処理で有効 |
session |
アプリケーション内の全ページで有効(ユーザ単位) |
application |
アプリケーション内の全ページで有効(全ユーザ) |
表1:scope属性で利用可能なスコープの指定
デフォルトは最も範囲の狭いページスコープで、有効範囲が最も広いのはアプリケーションスコープです。リクエストスコープについては、ややわかりづらいかもしれませんので、改めて後述します。
セッションスコープの変数を取得するには、暗黙オブジェクトsessionScopeを使用してください(リスト4の2)(注11)。
※注11:
オブジェクトを省略して、${sample}と記述することも可能です。スコープが明示されていない場合、式言語では該当する値が存在しないかどうかを、page、request、session、applicationの順序で検索します。
セッションの有効期限はweb.xmlの要素で指定可能です(リスト5)。また、セッション情報を破棄したい場合には、JakartaTaglibsのSessionタグライブラリを使用してください。
リスト5:web.config(抜粋)
<session-config>
<session-timeout>10</session-timeout>
</session-config>
|