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>