在 Servlet 中开发会话管理

关于此任务

此信息(与编码示例 SessionSample.java 组合在一起)提供了在您自己的 Servlet 中实现会话的编程模型。

过程

  1. 获取 HttpSession 对象。

    要获取会话,请使用 Java™ Servlet 3.0 API 中的 javax.servlet.http.HttpServletRequest 对象的 getSession 方法。

    当您第一次获取 HttpSession 对象时,会话管理工具使用三种方法之一来建立对会话的跟踪:cookie、URL 重写或安全套接字层 (SSL) 信息。
    不推荐使用的功能部件 不推荐使用的功能部件: 不推荐在 WebSphere® Application Server V7.0 中使用 SSL 标识来进行会话跟踪。可以配置会话跟踪以使用 cookie,或者修改应用程序以使用 URL 重写depfeat

    假设会话管理工具使用 cookie。在这种情况下,会话管理工具创建一个唯一的会话标识,而且通常将它作为一个 cookie 发送回浏览器。该用户的每个后续请求(在同一浏览器中)会传送包含会话标识的 cookie,且会话管理工具使用此标识来查找用户的现有 HttpSession 对象。

    在代码样本的第 1 步中,Boolean(create) 设置为 true,以便在 HttpSession 对象不存在时创建。(在 Servlet 2.3 API 及更高版本中,javax.servlet.http.HttpServletRequest.getSession() 方法没有缺省为 true 的布尔值,并当此用户的 HttpSession 不存在时便会创建一个会话。)

  2. 在会话中存储并检索用户定义的数据。

    建立会话后,您可以在该会话中添加和检索用户定义的数据。HttpSession 对象的方法类似于 java.util.Dictionary 中添加、检索和移除任意 Java 对象的方法。

    在代码样本的第 2 步中,Servlet 从 HttpSession 对象中读取一个整数对象,对其增量,并将之写回。您可以用任何名称来标识 HttpSession 对象中的值。代码样本使用的名称为 sessiontest.counter。

    由于 HttpSession 对象在用户可能访问的 Servlet 之间是共享的,所以考虑采用站点范围的命名约定,以避免冲突。

  3. (可选)输出包含 HttpSession 对象中数据的 HTML 响应页面。
  4. 向用户提供一个反馈以表明在会话期间操作已执行。您可能要向客户机浏览器发送 HTML 代码,表明操作已发生。 例如,在代码样本的步骤 3 中,Servlet 生成了一个返回到用户的网页,每次用户在会话期间访问该网页时,它就会显示 sessiontest.counter 的值。
  5. (可选)通知侦听器。 当会话准备结束并变成失效时,将通知存储在会话(该会话实现了 javax.servlet.http.HttpSessionBindingListener 接口)中的对象。该通知允许您执行会话后期处理,包含将会话期间进行的数据更改永久保存到数据库。
  6. 结束会话。 您可以结束会话:
    • 如果会话在指定时间内非活动,那么将由会话管理工具自动结束。管理员提供一种指定时间量的方法,在此时间量后会话将失效。
    • 通过对 Servlet 编码以对此会话对象调用 invalidate() 方法。

示例

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;


public class SessionSample  extends HttpServlet {
  public void doGet (HttpServletRequest request, HttpServletResponse response)  
       throws ServletException, IOException {


   // Step 1: Get the Session object
 
      boolean create = true;         
      HttpSession session = request.getSession(create);
 
   // Step 2: Get the session data value


      Integer ival = (Integer)              
      session.getAttribute ("sessiontest.counter");         
      if (ival == null) ival = new Integer (1);         
      else ival = new Integer (ival.intValue () + 1);           
      session.setAttribute ("sessiontest.counter", ival);       

   // Step 3: Output the page

      response.setContentType("text/html"); 
      PrintWriter out = response.getWriter(); 
      out.println("<html>");  
      out.println("<head><title>Session Tracking Test</title></head>");
      out.println("<body>");
      out.println("<h1>Session Tracking Test</h1>");
      out.println ("You have hit this page " + ival + " times" + "<br>");
      out.println ("Your " + request.getHeader("Cookie"));
      out.println("</body></html>");    
   }
}

指示主题类型的图标 任务主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tprs_sesi
文件名:tprs_sesi.html