练习 3.3:跟踪会话变量

Web 应用程序是无状态的,这表示不存在用于保存和检索客户或用户交互的状态的内置机制。换言之,仅根据浏览器信息,Web 应用程序并不知道谁正在访问 Web 页面。当 Web 应用程序需要跟踪一个用户时,它必须存储有关该用户与应用程序交互的信息。此信息必须以下列其中一种持久格式保存在 Web 页面外部:

您已经知道如何读写数据库。使用 HTTP 请求变量可用于少量非安全数据。大多数 Web 应用程序使用应用程序服务器会话变量来跟踪用户与应用程序的交互。在此练习中,将通过创建两个 Web 页面学习如何使用会话变量。第一个页面允许用户输入数据,该数据将存储在会话对象中。第二个页面访问会话对象并显示该数据。

什么是会话变量?

会话变量是由应用程序服务器创建并处理的变量,用来存储有关用户会话的信息。这些变量存储在会话对象中,而会话对象是当用户访问应用程序时应用程序服务器定义的一个内存区域。由于会话对象存储在内存中而不是存储在磁盘中,所以它们的性能比数据库或文件好。会话对象在用户与应用程序交互时存在,或者在应用程序需要的时间内存在。还可以将会话对象设置为:在经过一定时间的不活动状态之后到期。存在的时间长度称为会话对象的限定作用域

创建存储会话信息的页面

  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. 提交按钮标签字段中,输入写至会话对象
  14. 单击确定
  15. 单击完成
  16. 从“页数据”视图中,将 updateSession() 函数拖到页面上的“写至会话对象”按钮上。
  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 组件抽屉中,将命令 - 按钮拖到页面底部的新行上。
  14. 将新按钮的标签更改为返回到更新值
  15. 从“页数据”视图中,将 updateSession() 函数拖到页面上的新命令按钮上。
  16. 保存该页面。

测试会话变量

既然创建了两个使用会话对象的页面,就可以测试它们以查看当用户使用 Web 应用程序时会话对象是否存在。应用程序可以包含访问同一个会话对象的许多不同页面,但这两个页面的交互可以说明原理。

  1. 在服务器上运行 UpdateSession.jsp 页面。

    当在 Web 浏览器中打开 UpdateSession.jsp 页面时,注意 msg 字段显示的内容是“Enter the following”。此字段仍然设置为缺省值,原因是您还没有会话对象。如果您确实有会话对象,则页面代码应已将消息值设置为“Update your information”。

  2. 将信息输入到 Your namePhoneYour ageYour personal user IDA password 等字段中。

    该页面看起来应如下所示:

    Web 浏览器中 UpdateSession.jsp 页面的外观

  3. 单击写至会话对象按钮。

    这就会将信息添加至会话对象。于是,浏览器就会被重定向至 ViewSession.jsp 页面,该页面显示您刚才输入的信息。ViewSession.jsp 页面看起来应如下所示:

    Web 浏览器中 ViewSession.jsp 页面的外观

  4. 单击返回到更新值

    浏览器就会被重定向至 UpdateSession.jsp 页面。由于 PageHandler 检测到会话对象中的信息,所以它会显示这些信息和消息“Update your information”而不是“Enter the following”。

继续练习 3.4:验证数据

反馈
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.