Web アプリケーションは、ステートレス なアプリケーションです。つまり、顧客またはユーザーの対話の状態を保存および取得するためのビルトイン・メカニズムがないということです。すなわち、Web アプリケーションでは、ブラウザー情報だけでは誰が Web ページにアクセスしているか認識されません。Web アプリケーションで単一のユーザーをトラックする必要がある場合には、そのユーザーとアプリケーションとの対話に関する情報を保管しなければなりません。そのような情報は、Web ページ自体とは別に、以下のいずれかの永続的な形式を使用して保管する必要があります。
データベースに対する読み取りおよび書き込みの方法については既に学習しました。HTTP 要求変数は、小さいサイズの無保護データに使用することができます。大部分の Web アプリケーションでは、アプリケーション・サーバー・セッション変数を使用して、ユーザーとアプリケーションとの対話をトラックしています。この演習では、2 つの Web ページを作成しながら、セッション変数の使用方法について学習します。最初のページは、セッション・オブジェクトに格納されるデータをユーザーが入力するページです。2 番目のページは、セッション・オブジェクトにアクセスして、データを表示するページです。
セッション変数 とは、ユーザーのセッションに関する情報を保存するためにアプリケーション・サーバーによって作成および操作される変数です。セッション変数は、セッション・オブジェクト に保管されます。セッション・オブジェクトとは、ユーザーがアプリケーションにアクセスすると、アプリケーション・サーバーによって定義されるメモリー域です。セッション・オブジェクトはディスクではなくメモリーに保管されるので、データベースやファイルに比べてパフォーマンスがよくなります。セッション・オブジェクトは、ユーザーがアプリケーションと対話している間、またはアプリケーションで必要な期間、保持されます。また、セッション・オブジェクトは、非アクティブ状態が一定の時間続くと、有効期限が切れるように設定することができます。このようなパーシスタンス (永続性) の期間をセッション・オブジェクトのスコープ といいます。
UpdateSession
package pagehandlers; import data.*; PageHandler UpdateSession {view = "UpdateSession.jsp", onPageLoadFunction = onPageLoad} userSession sessionData; enterUpdate char(1) {value = "N"}; Function onPageLoad() getSessionAttr("enter",enterUpdate); if (enterUpdate == "Y") getSessionAttr("sess",userSession); userSession.msg = "Update your information"; end End function updateSession() setSessionAttr("sess",userSession); forward to "ViewSession"; end End Record sessionData type basicRecord msg char(50) {value = "Enter the following"}; name char(50) {displayName = "Your name"}; phone char(50) {displayName = "Phone: (xxx)xxx-xxxx"}; age int {displayName = "Your age"}; userid char(50) {displayName = "Your personal user ID"}; password char(50) {displayName = "A password"}; end
以下は、ここで挿入したコードに関する技術面での注釈です。
ViewSession
package pagehandlers; import data.*; PageHandler ViewSession {view = "ViewSession.jsp", onPageLoadFunction = onPageLoad} userSession sessionData; enterUpdate char(1) {value = "Y"}; Function onPageLoad() getSessionAttr("sess",userSession); end function updateSession() setSessionAttr("enter",enterUpdate); forward to "UpdateSession"; end End
セッション・オブジェクトを使用する 2 つのページを作成したので、ユーザーが Web アプリケーションを操作している間はセッション・オブジェクトが保持されることを確認するため、それらをテストすることができます。ユーザーが実際に作成するアプリケーションではさまざまなページから同一のセッション・オブジェクトにアクセスする可能性がありますが、これら 2 つのページの相互作用を確認することで、原則は理解できると思います。
UpdateSession.jsp ページを Web ブラウザーで開いたら、「msg」フィールドに「Enter the following.」と表示されていることを確認してください。まだセッション・オブジェクトがないため、このフィールドはデフォルト値のままになっています。セッション・オブジェクトが既にある場合には、ページ・コードによってメッセージの値が「Update your information.」に設定されています。
ページは次のようになります。
情報がセッション・オブジェクトに追加されます。ブラウザーが ViewSession.jsp ページにリダイレクトされ、入力したばかりの情報が表示されます。新規 ViewSession.jsp ページは次のようになります。
ブラウザーが UpdateSession.jsp ページへリダイレクトされます。PageHandler がセッション・オブジェクト内の情報を検出するので、「Enter the following.」ではなく「Update your information」というメッセージが情報と共に表示されます。
「演習 3.4: データの妥当性検査」に進んでください。