Servlet 教程 之 Servlet Session 跟踪 3

简介: Servlet教程展示了如何使用HttpSession进行Session跟踪,以保持Web服务器与客户端的会话状态。当不存在Session时,代码创建一个并获取其创建及最后访问时间。Servlet `SessionTrack`检查是否为新访问者,更新访问计数和用户ID,并显示Session详细信息,包括ID、创建及最后访问时间。配置文件`web.xml`定义了Servlet映射。在浏览器中访问`http://localhost:8080/TomcatTest/SessionTrack`可查看效果。

Servlet 教程 之 Servlet Session 跟踪 3

Servlet Session 跟踪

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

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

Session 跟踪实例

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

package com.baidu.test;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**

  • Servlet implementation class SessionTrack
    */
    @WebServlet("/SessionTrack")
    public class SessionTrack extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {

     // 如果不存在 session 会话,则创建一个 session 对象
     HttpSession session = request.getSession(true);
     // 获取 session 创建时间
     Date createTime = new Date(session.getCreationTime());
     // 获取该网页的最后一次访问时间
     Date lastAccessTime = new Date(session.getLastAccessedTime());
    
     //设置日期输出的格式  
     SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
    
     String title = "Servlet Session 实例 - 百度";
     Integer visitCount = new Integer(0);
     String visitCountKey = new String("visitCount");
     String userIDKey = new String("userID");
     String userID = new String("baidu");
     if(session.getAttribute(visitCountKey) == null) {
         session.setAttribute(visitCountKey, new Integer(0));
     }
    
    // 检查网页上是否有新的访问者
    if (session.isNew()){
        title = "Servlet Session 实例 - 百度";
         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;charset=UTF-8");
    PrintWriter out = response.getWriter();

    String docType = "<!DOCTYPE html>\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>创建时间</td>\n" +
            "  <td>" +  df.format(createTime) + 
            "  </td></tr>\n" +
            "<tr>\n" +
            "  <td>最后访问时间</td>\n" +
            "  <td>" + df.format(lastAccessTime) + 
            "  </td></tr>\n" +
            "<tr>\n" +
            "  <td>用户 ID</td>\n" +
            "  <td>" + userID + 
            "  </td></tr>\n" +
            "<tr>\n" +
            "  <td>访问统计:</td>\n" +
            "  <td>" + visitCount + "</td></tr>\n" +
            "</table>\n" +
            "</body></html>"); 
}

}
编译上面的 Servlet SessionTrack,并在 web.xml 文件中创建适当的条目。

<?xml version="1.0" encoding="UTF-8"?>




SessionTrack

com.baidu.test.SessionTrack


SessionTrack

/TomcatTest/SessionTrack


在浏览器地址栏输入 http://localhost:8080/TomcatTest/SessionTrack

目录
相关文章
|
6月前
|
XML Java 数据格式
Servlet 教程 之 Servlet 自动刷新页面 1
Servlet教程展示了如何使用Java Servlet自动刷新页面。通过response.setIntHeader(&quot;Refresh&quot;, 5)方法,页面将在5秒间隔自动刷新。给出的实例中,Servlet每5秒更新并显示当前时间。需编译Servlet并在web.xml配置,然后访问http://localhost:8080/TomcatTest/Refresh以观察效果。
47 10
|
6月前
|
存储
Servlet 教程 之 Servlet Session 跟踪 1
Servlet Session跟踪教程介绍了在HTTP无状态特性下保持客户端与服务器会话的三种方法:Cookie、隐藏表单字段和URL重写。Cookie通过分配唯一ID但不适用于所有浏览器;隐藏表单字段在表单提交时维持跟踪,但不适用于常规链接;URL重写将session ID添加到URL中,对无cookie支持的浏览器更友好,但会导致静态页面URL动态化。
23 1
|
6月前
|
Java 关系型数据库 MySQL
Servlet 教程 之 Servlet 有用的资源
探索Servlet世界:访问Sun&#39;s Site获取官方资料,Tomcat作为开源JSP引擎,搭配MySQL Connector/J实现数据库连接。深入学习Java编程,参考The Java Tutorials及Java 2 SDK文档,免费下载Java并关注Sun Developer Network获取最新资源。
45 1
|
6月前
|
Java
Servlet 教程 之 Servlet 生命周期 4
Servlet生命周期包括初始化、服务和销毁三个阶段:init()方法在创建时调用,service()方法处理客户端请求,destroy()方法在销毁前执行。对于POST请求,doPost()方法处理HTML表单数据。当Servlet不再使用时,由JVM的垃圾回收器自动清理。
41 5
|
6月前
|
Java
Servlet 教程 之 Servlet 生命周期 3
Servlet生命周期包括初始化(init())、服务(service())和销毁(destroy())三个阶段。doGet()方法处理GET请求,接收HttpServletRequest和HttpServletResponse参数。当Servlet不再使用时,由JVM的垃圾回收器自动清理。
50 5
|
6月前
|
Java 容器
Servlet 教程 之 Servlet 生命周期 2
Servlet生命周期包括初始化(init())、处理请求(service())、销毁(destroy())和垃圾回收。service()方法是核心,容器调用它来响应客户端请求,并根据HTTP类型调用doGet()或doPost()。当请求处理完毕,servlet会被销毁,最终由JVM的垃圾回收器清理。
51 5
|
6月前
|
Java 数据库连接
Servlet 教程 之 Servlet 生命周期 5
Servlet生命周期包括初始化(init())、服务(service())和销毁(destroy())三个阶段。destroy()方法在Servlet即将销毁时执行,用于资源释放和清理工作,如关闭数据库连接。之后,Servlet对象等待垃圾回收。
67 4
|
6月前
|
Java 容器
Servlet 教程 之 Servlet 生命周期 6
Servlet生命周期包括初始化(init())、处理请求(service())和销毁(destroy())。当首个请求到达时,容器加载Servlet并调用init()。之后,多个线程共享同一Servlet实例,每个线程独立调用service()处理请求。最后,销毁前调用destroy(),实例由JVM回收。
37 2
|
6月前
|
Java
Servlet 教程 之 Servlet 生命周期 1
Servlet生命周期包括初始化、服务和销毁三个阶段:init()方法在Servlet创建时调用,仅初始化一次;service()方法处理客户端请求,每次请求都创建新线程;destroy()方法在Servlet销毁前执行。Servlet实例在首次请求时创建,可通过配置在服务器启动时加载。init()方法用于设置一次性初始化数据。
83 3
|
6月前
|
应用服务中间件
Servlet 教程 之 Servlet Session 跟踪 4
Servlet教程讲解了如何进行Session跟踪,HTTP协议本身无状态,但可通过以下方式维持会话:删除特定属性、整个Session或设定超时时间(使用setMaxInactiveInterval())。此外,可使用logout注销用户,或在web.xml配置全局超时。在Servlet中,getMaxInactiveInterval()返回Session超时(以秒计),例如,web.xml设为15分钟,则返回900。
37 0