`
禹爸爸
  • 浏览: 86292 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Java Servlet学习笔记(七)Servlet Session跟踪

    博客分类:
  • Java
阅读更多

ServletSession 跟踪

HTTP 是一种"无状态"协议,这意味着每次客户端检索网页时,客户端打开一个单独的连接到 Web 服务器,服务器会自动不保留之前客户端请求的任何记录。

但是仍然有以下三种方式来维持 Web 客户端和 Web 服务器之间的 session 会话:

Cookies

一个 Web 服务器可以分配一个唯一的 session 会话 ID 作为每个 Web 客户端的 cookie,对于客户端的后续请求可以使用接收到的 cookie 来识别。

这可能不是一个有效的方法,因为很多浏览器不支持 cookie,所以我们建议不要使用这种方式来维持 session 会话。

隐藏的表单字段

一个 Web 服务器可以发送一个隐藏的 HTML 表单字段,以及一个唯一的 session 会话 ID,如下所示:

<inputtype="hidden"name="sessionid"value="12345">

该条目意味着,当表单被提交时,指定的名称和值会被自动包含在 GET 或 POST 数据中。每次当 Web 浏览器发送回请求时,session_id 值可以用于保持不同的 Web 浏览器的跟踪。

这可能是一种保持 session 会话跟踪的有效方式,但是点击常规的超文本链接(<A HREF...>)不会导致表单提交,因此隐藏的表单字段也不支持常规的 session 会话跟踪。

URL 重写

您可以在每个 URL 末尾追加一些额外的数据来标识 session 会话,服务器会把该 session 会话标识符与已存储的有关 session 会话的数据相关联。

例如,http://w3cschool.cc/file.htm;sessionid=12345,session 会话标识符被附加为 sessionid=12345,标识符可被 Web 服务器访问以识别客户端。

URL 重写是一种更好的维持 session 会话的方式,它在浏览器不支持 cookie 时能够很好地工作,但是它的缺点是会动态生成每个 URL 来为页面分配一个 session 会话 ID,即使是在很简单的静态 HTML 页面中也会如此。

HttpSession 对象

除了上述的三种方式,Servlet 还提供了 HttpSession 接口,该接口提供了一种跨多个页面请求或访问网站时识别用户以及存储有关用户信息的方式。

Servlet 容器使用这个接口来创建一个 HTTP 客户端和 HTTP 服务器之间的 session 会话。会话持续一个指定的时间段,跨多个连接或页面请求。

您会通过调用 HttpServletRequest 的公共方法getSession()来获取 HttpSession 对象,如下所示:

HttpSession session = request.getSession();

你需要在向客户端发送任何文档内容之前调用request.getSession()。下面总结了 HttpSession 对象中可用的几个重要的方法:

序号 方法 & 描述
1 public Object getAttribute(String name)
该方法返回在该 session 会话中具有指定名称的对象,如果没有指定名称的对象,则返回 null。
2 public Enumeration getAttributeNames()
该方法返回 String 对象的枚举,String 对象包含所有绑定到该 session 会话的对象的名称。
3 public long getCreationTime()
该方法返回该 session 会话被创建的时间,自格林尼治标准时间 1970 年 1 月 1 日午夜算起,以毫秒为单位。
4 public String getId()
该方法返回一个包含分配给该 session 会话的唯一标识符的字符串。
5 public long getLastAccessedTime()
该方法返回客户端最后一次发送与该 session 会话相关的请求的时间自格林尼治标准时间 1970 年 1 月 1 日午夜算起,以毫秒为单位。
6 public int getMaxInactiveInterval()
该方法返回 Servlet 容器在客户端访问时保持 session 会话打开的最大时间间隔,以秒为单位。
7 public void invalidate()
该方法指示该 session 会话无效,并解除绑定到它上面的任何对象。
8 public boolean isNew(
如果客户端还不知道该 session 会话,或者如果客户选择不参入该 session 会话,则该方法返回 true。
9 public void removeAttribute(String name)
该方法将从该 session 会话移除指定名称的对象。
10 public void setAttribute(String name, Object value)
该方法使用指定的名称绑定一个对象到该 session 会话。
11 public void setMaxInactiveInterval(int interval)
该方法在 Servlet 容器指示该 session 会话无效之前,指定客户端请求之间的时间,以秒为单位。

 

Session 跟踪实例

本实例说明了如何使用 HttpSession 对象获取 session 会话创建时间和最后访问时间。如果不存在 session 会话,我们将通过请求创建一个新的 session 会话。

// 导入必需的 java 库import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import java.util.*;// 扩展 HttpServlet 类publicclassSessionTrackextendsHttpServlet{publicvoid doGet(HttpServletRequest request,HttpServletResponse response)throwsServletException,IOException{// 如果不存在 session 会话,则创建一个 session 对象HttpSession session = request.getSession(true);// 获取 session 创建时间Date createTime =newDate(session.getCreationTime());// 获取该网页的最后一次访问时间Date lastAccessTime =newDate(session.getLastAccessedTime());String title ="欢迎回到我的网站";Integer visitCount =newInteger(0);String visitCountKey =newString("visitCount");String userIDKey =newString("userID");String userID =newString("ABCD");// 检查网页上是否有新的访问者if(session.isNew()){
         title ="欢迎来到我的网站";
         session.setAttribute(userIDKey, userID);}else{
         visitCount =(Integer)session.getAttribute(visitCountKey);
         visitCount = visitCount +1;
         userID =(String)session.getAttribute(userIDKey);}
      session.setAttribute(visitCountKey,  visitCount);// 设置响应内容类型
      response.setContentType("text/html");PrintWriterout= response.getWriter();String docType ="<!doctype html public \"-//w3c//dtd html 4.0 "+"transitional//en\">\n";out.println(docType +"<html>\n"+"<head><title>"+ title +"</title></head>\n"+"<body bgcolor=\"#f0f0f0\">\n"+"<h1 align=\"center\">"+ title +"</h1>\n"+"<h2 align=\"center\">Session 信息</h2>\n"+"<table border=\"1\" align=\"center\">\n"+"<tr bgcolor=\"#949494\">\n"+"  <th>Session 信息</th><th>值</th></tr>\n"+"<tr>\n"+"  <td>id</td>\n"+"  <td>"+ session.getId()+"</td></tr>\n"+"<tr>\n"+"  <td>Creation Time</td>\n"+"  <td>"+ createTime +"  </td></tr>\n"+"<tr>\n"+"  <td>Time of Last Access</td>\n"+"  <td>"+ lastAccessTime +"  </td></tr>\n"+"<tr>\n"+"  <td>User ID</td>\n"+"  <td>"+ userID +"  </td></tr>\n"+"<tr>\n"+"  <td>Number of visits</td>\n"+"  <td>"+ visitCount +"</td></tr>\n"+"</table>\n"+"</body></html>");}}

编译上面的 ServletSessionTrack,并在 web.xml 文件中创建适当的条目。在浏览器地址栏输入http://localhost:8080/SessionTrack,当您第一次运行时将显示如下结果:

欢迎来到我的网站

Session 信息

Session 信息 值
id 0AE3EC93FF44E3C525B4351B77ABB2D5
Creation Time Tue Jun 08 17:26:40 GMT+04:00 2014
Time of Last Access Tue Jun 08 17:26:40 GMT+04:00 2014
User ID ABCD
Number of visits 0

再次尝试运行相同的 Servlet,它将显示如下结果:

欢迎回到我的网站

Session 信息

Session 信息 值
id 0AE3EC93FF44E3C525B4351B77ABB2D5
Creation Time Tue Jun 08 17:26:40 GMT+04:00 2014
Time of Last Access Tue Jun 08 17:26:40 GMT+04:00 2014
User ID ABCD
Number of visits 1

 

删除 Session 会话数据

当您完成了一个用户的 session 会话数据,您有以下几种选择:

  • 移除一个特定的属性:您可以调用public void removeAttribute(String name)方法来删除与特定的键相关联的值。 to delete the value associated with a particular key.
  • 删除整个 session 会话:您可以调用public void invalidate()方法来丢弃整个 session 会话。
  • 设置 session 会话过期时间:您可以调用public void setMaxInactiveInterval(int interval)方法来单独设置 session 会话超时。
  • 注销用户:如果使用的是支持 servlet 2.4 的服务器,您可以调用logout来注销 Web 服务器的客户端,并把属于所有用户的所有 session 会话设置为无效。
  • web.xml 配置:如果您使用的是 Tomcat,除了上述方法,您还可以在 web.xml 文件中配置 session 会话超时,如下所示:
<session-config><session-timeout>15</session-timeout></session-config>

上面实例中的超时时间是以分钟为单位,将覆盖 Tomcat 中默认的 30 分钟超时时间。

在一个 Servlet 中的 getMaxInactiveInterval() 方法会返回 session 会话的超时时间,以秒为单位。所以,如果在 web.xml 中配置 session 会话超时时间为 15 分钟,那么 getMaxInactiveInterval() 会返回 900。

分享到:
评论

相关推荐

    JSP&Servlet学习笔记.pdf

    由于这部分内容是电子书中的学习笔记,电子书的内容并未直接给出,因此只能根据电子书的标题“JSP&Servlet学习笔记”和描述来推测可能涉及的知识点,而没有具体的电子书内容可以分析。如需进一步学习,建议查阅相关...

    [JSP&Servlet;学习笔记(第2版)]

    **JSP(Java Server Pages)与Servlet...这个**[JSP&Servlet学习笔记(第2版)]**会涵盖这些主题,并可能包括示例代码、最佳实践和常见问题解答,帮助读者全面掌握JSP和Servlet的使用技巧,进一步提升Java Web开发能力。

    吉林大学珠海学院JSP&Servlet学习笔记(第二版)课后答案

    吉林大学珠海学院JSP&Servlet学习笔记(第二版)课后答案 本资源为吉林大学珠海学院JSP&Servlet学习笔记(第二版)的课后答案,涵盖了JSP和Servlet相关的知识点。本笔记共分为九章,每章节都包含了相关的问题答案,...

    jsp/servlet个人学习笔记

    **JSP(JavaServer Pages)/Servlet 知识详解** JSP 和 Servlet 是 Java Web 开发中的核心组件,它们在构建动态网站时起着至关重要的作用。以下是对这两个技术及其相关概念的详细解释: 1. **JSP 基础** JSP 是一...

    Servlet学习笔记

    ### Servlet学习笔记精炼知识点 #### 一、Servlet初始化与加载机制 1. **Servlet注册与实例化**:在Web应用中,一个Servlet的生命周期始于它的注册与实例化过程。通常,这一过程是在Web服务器启动时,根据`web.xml...

    Jsp&Servlet学习笔记中的完整范例Gossip

    **JSP(JavaServer Pages)与Servlet是Java Web开发中两个关键的技术,它们在Web应用程序中扮演着重要的角色。** **JSP** 是一种动态网页技术,它允许开发者在HTML页面中嵌入Java代码,使得网页具有动态生成的能力...

    JSP Servlet 学习笔记源码

    本学习笔记源码提供了全面的学习资源,涵盖了这两个技术的基础到高级应用,旨在帮助开发者深入理解并熟练掌握JSP和Servlet。 1. **JSP基础**: JSP是一种服务器端的脚本语言,它将HTML、CSS、JavaScript与Java代码...

    Servlet学习笔记4

    ### Servlet学习笔记4 #### 一、URL Pattern详解 在Servlet配置中,URL Pattern是非常重要的一个概念,它决定了Servlet能够响应哪些请求路径。通常来说,URL Pattern可以分为三种类型: 1. **确切路径匹配**:...

    JSP-Servlet学习笔记第2版.pdf

    由于直接学习笔记的内容没有给出具体的实例代码和详细解释,所以这里只提供了理论层面的知识点。如果需要学习具体实现,可以寻找相关的教程和项目实践来加深理解。同时需要注意的是,由于JSP/Servlet技术相对老旧,...

    老杜Servlet笔记.zip

    2020-5-11 Servlet学习---Session 2020-5-17 监听器学习 2020-5-17 IDEA中的Maven的简单使用 2020-5-18 JavaWeb学习 2020-5-19 JavaWeb学习 2020-5-21 JavaWeb学习 JSP,EL,JSTL,Filter, 2020-5-23 MVC、三层设计...

    servlet学习笔记

    ### servlet学习笔记详解 #### Tomcat介绍 **Tomcat服务器**是基于Sun公司的JSWDK(Java Servlet and Web Development Kit)发展而来的杰出Servlet/JSP容器。作为Apache-Jakarta项目的一部分,Tomcat不仅能够执行...

    良葛格JspServlet学习笔记.pdf

    ### 良葛格JspServlet学习笔记 #### 一、引言 在现代Web开发领域,特别是Java EE平台中,JSP (JavaServer Pages) 和 Servlet 技术扮演着非常重要的角色。这两种技术共同构成了Java Web应用的基础,分别侧重于用户...

    韩顺平servlet笔记

    【描述】:“韩顺平servlet笔记 tomcat配置 cookie session 开发”描述了学习的重点,包括了如何配置和使用Tomcat服务器,这是运行Java Web应用的基础。Cookie和Session是Web开发中的关键概念,它们用于管理和跟踪...

    JAVA WEB学习笔记

    【JAVA WEB学习笔记】 Java Web是Java技术在Web开发领域中的应用,涵盖了从服务器端编程到客户端交互的各种技术。这份学习笔记将带你深入理解Java Web的核心概念和实践技巧。 1. **Servlet与JSP** - Servlet是...

    Servlet&JSP学习笔记源代码

    在"Servlet&JSP学习笔记源代码"中,林信良教授通过实例讲解了这两项技术的基础和进阶知识。这些源代码是在Eclipse集成开发环境中创建的,Eclipse是Java开发的主流工具,支持丰富的插件,使得开发、调试和部署Servlet...

    B站韩顺平2011最细servlet笔记全

    "B站韩顺平2011最细servlet笔记全"是韩顺平老师在2011年发布的关于Servlet的详细学习资料,涵盖了Servlet的基础到高级应用,是学习Servlet的宝贵资源。 Servlet主要知识点包括: 1. **Servlet基础**:了解Servlet...

    Servlet笔记

    总之,Servlet是Java Web开发的基础,了解其基本概念和工作原理对于构建高效、可靠的Web应用程序至关重要。通过深入学习Servlet的工作机制,开发者可以更好地控制Web应用程序的行为,从而提高应用的安全性和性能。

Global site tag (gtag.js) - Google Analytics