演習 3.3: セッション変数のトラッキング

Web アプリケーションは、ステートレス なアプリケーションです。つまり、顧客またはユーザーの対話の状態を保存および取得するためのビルトイン・メカニズムがないということです。すなわち、Web アプリケーションでは、ブラウザー情報だけでは誰が Web ページにアクセスしているか認識されません。Web アプリケーションで単一のユーザーをトラックする必要がある場合には、そのユーザーとアプリケーションとの対話に関する情報を保管しなければなりません。そのような情報は、Web ページ自体とは別に、以下のいずれかの永続的な形式を使用して保管する必要があります。

データベースに対する読み取りおよび書き込みの方法については既に学習しました。HTTP 要求変数は、小さいサイズの無保護データに使用することができます。大部分の Web アプリケーションでは、アプリケーション・サーバー・セッション変数を使用して、ユーザーとアプリケーションとの対話をトラックしています。この演習では、2 つの Web ページを作成しながら、セッション変数の使用方法について学習します。最初のページは、セッション・オブジェクトに格納されるデータをユーザーが入力するページです。2 番目のページは、セッション・オブジェクトにアクセスして、データを表示するページです。

セッション変数とは

セッション変数 とは、ユーザーのセッションに関する情報を保存するためにアプリケーション・サーバーによって作成および操作される変数です。セッション変数は、セッション・オブジェクト に保管されます。セッション・オブジェクトとは、ユーザーがアプリケーションにアクセスすると、アプリケーション・サーバーによって定義されるメモリー域です。セッション・オブジェクトはディスクではなくメモリーに保管されるので、データベースやファイルに比べてパフォーマンスがよくなります。セッション・オブジェクトは、ユーザーがアプリケーションと対話している間、またはアプリケーションで必要な期間、保持されます。また、セッション・オブジェクトは、非アクティブ状態が一定の時間続くと、有効期限が切れるように設定することができます。このようなパーシスタンス (永続性) の期間をセッション・オブジェクトのスコープ といいます。

セッション情報を格納するページの作成

  1. このチュートリアルで使用したすべてのページを作成したのと同じ方法で、Faces JSP ファイルを新規作成する。新規 Faces JSP ファイルには以下の名前を付けます。

    UpdateSession

  2. 新規ページで、デフォルト・テキストの「Place your page content here.」を削除する。
  3. 削除したテキストの代わりに、Update session values と入力して、Enter キーを押す。
  4. ページを右クリックして、「ページ・コードの編集」をクリックする。
  5. ページ・コード・ファイル内のすべてのコードを削除して、代わりに以下のコードを入力する。
    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

    以下は、ここで挿入したコードに関する技術面での注釈です。

  6. ファイルを保存して閉じる。
  7. UpdateSession.jsp ページに戻る。
  8. ページ・データ・ビューから、「userSession」レコードをページの下部へドラッグする。
  9. 「挿入のコントロール」ウィンドウで、「既存レコードの更新」をクリックする。
  10. オプション」をクリックする。
  11. 削除ボタン」チェック・ボックスをクリアする。
  12. 実行ボタン」チェック・ボックスを選択する。
  13. Submit button Label」フィールドに Write to session object と入力する。
  14. OK」をクリックする。
  15. 終了」をクリックする。
  16. ページ・データ・ビューから、「updateSession()」関数をページ上の「Write to session object」 ボタンへドラッグする。
  17. ページを保管する。

セッション情報を表示するページの作成

  1. このチュートリアルで使用したすべてのページを作成したのと同じ方法で、Faces JSP ファイルを新規作成する。新規 Faces JSP ファイルには以下の名前を付けます。

    ViewSession

  2. 新規ページで、デフォルト・テキストの「Place your page content here.」を削除する。
  3. 削除したテキストの代わりに、View session values と入力して、Enter キーを押す。
  4. ページを右クリックして、「ページ・コードの編集」をクリックする。
  5. ページ・コード・ファイル内のすべてのコードを削除して、代わりに以下のコードを入力する。
    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

  6. 以下は、ここで挿入したコードに関する技術面での注釈です。
  7. ファイルを保存して閉じる。
  8. ViewSession.jsp ページに戻る。
  9. ページ・データ・ビューから、「userSession」レコードをページの下部へドラッグする。
  10. 「挿入のコントロール」ウィンドウで、 「既存レコードの表示 (読み取り専用)」をクリックする。
  11. 終了」をクリックする。
  12. 新規フィールドの下にブランク行を追加する。
  13. パレット・ビューの「Faces コンポーネント」ドロワーから、「コマンド - ボタン (Command - Button)」を、ページの下部の新規ブランク行へドラッグする。
  14. 新規ボタンのラベルを「Return to update values」に変更する。
  15. ページ・データ・ビューから、「updateSession()」関数をページ上の新規コマンド・ボタンへドラッグする。
  16. ページを保管する。

セッション変数のテスト

セッション・オブジェクトを使用する 2 つのページを作成したので、ユーザーが Web アプリケーションを操作している間はセッション・オブジェクトが保持されることを確認するため、それらをテストすることができます。ユーザーが実際に作成するアプリケーションではさまざまなページから同一のセッション・オブジェクトにアクセスする可能性がありますが、これら 2 つのページの相互作用を確認することで、原則は理解できると思います。

  1. UpdateSession.jsp ページをサーバーで実行する。

    UpdateSession.jsp ページを Web ブラウザーで開いたら、「msg」フィールドに「Enter the following.」と表示されていることを確認してください。まだセッション・オブジェクトがないため、このフィールドはデフォルト値のままになっています。セッション・オブジェクトが既にある場合には、ページ・コードによってメッセージの値が「Update your information.」に設定されています。

  2. Your name」、「Phone」、「Your age」、「Your personal user ID」、および「A password 」フィールドに情報を入力する。

    ページは次のようになります。

    Web ブラウザーにおける UpdateSession.jsp ページの外観

  3. Write to session object」ボタンをクリックする。

    情報がセッション・オブジェクトに追加されます。ブラウザーが ViewSession.jsp ページにリダイレクトされ、入力したばかりの情報が表示されます。新規 ViewSession.jsp ページは次のようになります。

    Web ブラウザーにおける ViewSession.jsp ページの外観

  4. Return to update values」をクリックする。

    ブラウザーが UpdateSession.jsp ページへリダイレクトされます。PageHandler がセッション・オブジェクト内の情報を検出するので、「Enter the following.」ではなく「Update your information」というメッセージが情報と共に表示されます。

演習 3.4: データの妥当性検査」に進んでください。

ご利用条件 | フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.