HTTP プロトコルはステートレスです。つまり、Web サーバーには複数の要求/応答を通してクライアントをトラッキングできません。しかし、JRun ではセッション トラッキング機能がサポートされているので、Web サイトで情報を格納し、複数の要求を通してクライアントをトラッキングできます。クライアントがアプリケーション内で別のページに移動しても、情報は破棄されず、ユーザ セッションが継続している間、保持されます。
特定のユーザ セッションに関する情報を格納するには、JSP session オブジェクトを使用します。ユーザがアプリケーション内で別のページに移動しても、session オブジェクトに格納されたデータは破棄されず、ユーザ セッションが継続している間、保持されます。
有効に設定すると、まだセッションを開始していないユーザからアプリケーションのページが要求された場合、session オブジェクトが自動的に作成されます。セッションが期限切れになった場合、または中断された場合は、Web サーバーにより、session オブジェクトが破棄されます。
JSP から session オブジェクトに情報を書き込むことができます。クライアントから要求された別の JSP で、この情報にアクセスすることが可能です。たとえば、ユーザのショッピング カートに ID を割り当てておくと、クライアントによりカートの内容が追加、削除、または修正されたときに、Web サイトからショッピング カートに関する情報にアクセスできます。この ID は session オブジェクトに格納できます。
JRun では、セッションのトラッキングにクッキーを使用します。したがって、この例を実行するには、ユーザのブラウザでクッキーをサポートしている必要があります。JRun セッション トラッキングの有効と無効を切り替えるには、JRun 管理コンソールを使用します。セッション トラッキングを制御する方法の詳細については、『JRun セットアップ ガイド』を参照してください。
次の例では、JSP が 3 ページ使用されています。最初のページ example3a.jsp では、URL 要求から名前と口座残高が取得され、この情報が session オブジェクトに書き込まれます。これで、クライアントがアクセスするすべての JSP から、この情報が使用できます。
example3a.JSP には、クライアントからほかの JSP へのアクセスに使用される 2 種類のリンクが表示されます。最初のリンクでは投資オプション、2 番目のリンクでは求人状況がリストに表示されます。この例の要求 URL は次のとおりです。
http://localhost/example3a.jsp?bal=222.45&fName=Steven
次の図は、この URL に対する example3a.jsp の出力を示します。
<html>
<head><title>Session Example</title></head>
<body>
<p>
<h1> Where will your balance take you?</h1>
<br>
<%-- 要求オブジェクトからパラメータを取得します。--%>
<% String firstName = request.getParameter("fName"); %>
<% String balance = request.getParameter("bal"); %>
<%-- bal パラメータを String から double に変換します。--%>
<% double accountBalance = Double.valueOf(balance).doubleValue(); %>
<%-- セッション オブジェクトに入力パラメータを書き込みます。
セッション オブジェクトは double を格納できません。
まず、オブジェクトを Double に変換する必要があります。
--%>
<%
session.setAttribute("userName", firstName);
Double tempAccountBalance = new Double(accountBalance);
session.setAttribute("userBalance", tempAccountBalance);
%>
<%-- 出力結果 --%>
Balance for <%=firstName %>:<%=accountBalance %> <br>
<br><br>
Would you like to <A href="example3b.jsp">invest your money</a>?.
<br><br>
Do you need a <a href="example3c.jsp">job</a>.
</body>
</html>
example3b.jsp ページにより、session オブジェクトからクライアントの名前と残高が調べられ、投資オプションが提示されるか、または求人を調べるためのプロンプトが表示されます。
<html>
<body>
<%-- セッション オブジェクトから名前を取得します。--%>
<% String fName = (String) session.getAttribute("userName"); %>
<h2>Hi <%=fName %> </h2>
<%-- 残高を取得し、double に変換します。--%>
<%
Double tempBal = (Double)session.getAttribute("userBalance");
double accountBalance = tempBal.doubleValue();
%>
<%-- 投資に十分な残高があるか? --%>
<% if(accountBalance > 100.00) { %>
Your balance of $<%= accountBalance %> is sufficient for investing.
We offer a number of investment opportunities, including: <br>
<li>Bonds<br>
<li>CDs<br>
<li>Mutual funds<br>
<% } %>
<%-- 残高が少なすぎるか? --%>
<% if(accountBalance <= 100.00) { %>
Your balance is too low for investing. It looks like you need a <a
href="example3c.jsp">job</a>.
<% } %>
</body>
</html>
The example3c.jsp page greets the user using the name passed in the session object and lists available jobs:
<html>
<body>
<%-- セッション オブジェクトからパラメータを取得します。--%>
<% String fName = (String) session.getAttribute("userName"); %>
<h2>Hi <%=fName %></h2>
<h2>Available positions include:</h2>
Software Engineer<br>
QA<br>
Technical Writer<br>
</body>
</html>