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天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
15天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
9天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
616 216
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
857 61
|
7天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1294 157
|
5天前
|
编解码 Linux 数据安全/隐私保护
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
243 138
|
7天前
|
存储 安全 固态存储
四款WIN PE工具,都可以实现U盘安装教程
Windows PE是基于NT内核的轻量系统,用于系统安装、分区管理及故障修复。本文推荐多款PE制作工具,支持U盘启动,兼容UEFI/Legacy模式,具备备份还原、驱动识别等功能,操作简便,适合新旧电脑维护使用。
533 109