HttpSession , HttpSessionListener , HttpSessionBindingListener , HttpSessionAtributeListener【转】

Pika Labs vs Runway ML:零基础小白如何选择最适合自己的AI视频生成工具? 本文详细对比了Pika Labs和Runway ML两款AI视频生成工具,从操作界面、生成效果、隐藏成本、工作流适配性和未来兼容性五个维度进行分析。Pika Labs适合零基础用户快速生成社交媒体短内容,而Runway ML则更适合专业级视频制作。帮助用户根据自身需求选择最适合的AI视频生成工具。 阅读详情

 一个session就是一系列某用户和服务器间的通讯。服务器有能力分辨出不同的用户。一个session的建立是从一个用户向服务器发第一个请求开始,而以用户显式结束或session超时为结束。
其工作原理是这样的:
1.当一个用户向服务器发送第一个请求时,服务器为其建立一个session,并为此session创建一个标识号;
2.这个用户随后的所有请求都应包括这个标识号。服务器会校对这个标识号以判断请求属于哪个session。
这种机制不使用IP作为标识,是因为很多机器是通过代理服务器方式上网,没法区分每一台机器。
对于session标识号(sessionID),有两种方式实现:cookies和URL重写。

HttpSession的使用
我们来看看在API中对session是如何定义和操作的。
当需要为用户端建立一个session时,servlet容器就创建了一个HttpSession对象。其中存储了和本session相关的信息。所以,在一个servlet中有多少个不同用户连接,就会有多少个HttpSession对象。
使用的机理是:
1.从请求中提取HttpSession对象;
2.增加或删除HttpSession中的属性;
3.根据需要关闭HttpSession或使其失效。

在请求中有两个重载的方法用来获取HttpSession对象。
HttpSession getSession(boolean create)/getSession();作用是提取HttpSession对象,如果没有自动创建。

获取到HttpSession对象后,我们就需要使用HttpSession的某些方法去设置和更改某些参数了。如:
void setAttribute(String name, Object value);
Object getAttribute(String name);
void removeAttribute(String name);

在javax.servlet.http包里一共定义了四个session监听器接口和与之关联的两个session事件。分别是:
HttpSessionAttributeListener and HttpSessionBindingEvent;
HttpSessionBindingListener and HttpSessionBindingEvent;
HttpSessionListener and HttpSessionEvent;
HttpSessionActivationListener and HttpSessionEvent.

他们的继承关系是:
所有四个接口的父类是java.util.EventListener;
HttpSessionEvent扩展java.util.EventObject;
而HttpSessionBindingEvent又扩展了HttpSessionEvent。

以下分别详述:
HttpSessionAttributeListener
当session中的属性被添加,更改,删除时得到通知。这个接口上节讲过,主要看其它三个。

HttpSessionBindingListener
当一个实现了HttpSessionBindingListener的类被加入到HttpSession中(或从中移出)时,会产生HttpBindingEvent事件,而这些事件会被它本身接收到。
本接口定义了两个方法:
void valueBound(HttpSessionBindingEvent e);
void valueUnbound(HttpSessionBindingEvent e);
当多个实现了HttpSessionBindingListener的类被加入到HttpSession中时,各类的方法只对本类感兴趣,不会去理会其它类的加入。
即使是同一类的不同实例间,也是互不关心的(各扫门前雪)。

我们可以看到前两个接口都对HttpSessionBindingEvent事件做出反应,但机理不同。
HttpSessionAttributeListener是在web.xml中登记的,servlet容器仅创建一个实例,来为任何在session中增加属性的servlet服务。触发事件的对象是所有可以转换为Object的实例。
HttpSessionBindingListener不用在web.xml中登记,在每个servlet中用new创建实例,且仅对本实例向session中的加入(或移出)感兴趣。触发事件的对象仅仅是自己。

HttpSessionListener
对于session的创建和取消感兴趣。需要在web.xml中登记。
共有两个方法:
void sessionCreated(HttpSessionEvent se);
void sessionDestroyed(HttpSessionEvent se);
使用它我们可以容易的创建一个类来对session计数。

也许我们会简单的考虑使用sessionDestroyed方法来在session结束后做一些清理工作。但是,请注意,当这个方法被调用的时候,session已经结束了,你不能从中提取到任何信息了。因此,我们要另辟蹊径。

一种通常采用的方法是使用HttpSessionBindingListener接口。在session创建时增加一个属性,而在session结束前最后一件事将这个属性删除,这样就会触发valueUnbound方法,所有对session的清理工作可以在这个方法中实现。

HttpSessionActivationListener
当session在分布式环境中跨JVM时,实现该接口的对象得到通知。共两个方法:
void sessionDidActivate(HttpSessionEvent se);
void sessionWillPassivate(HttpSessionEvent se);

1、HTTP协议本身是“连接-请求-应答-关闭连接”模式的,是一种无状态协议(HTTP只是一个传输协议);

2、Cookie规范是为了给HTTP增加状态跟踪用的(如果要精确把握,建议仔细阅读一下相关的RFC),但不是唯一的手段;

3、所谓Session,指的是客户端和服务端之间的一段交互过程的状态信息(数据);这个状态如何界定,生命期有多长,这是应用本身的事情;

4、由于B/S计算模型中计算是在服务器端完成的,客户端只有简单的显示逻辑,所以,Session数据对客户端应该是透明的不可理解的并且应该受控于服务端;Session数据要么保存到服务端(HttpSession),要么在客户端和服务端之间传递(Cookie或url rewritting或Hidden input);

5、由于HTTP本身的无状态性,服务端无法知道客户端相继发来的请求是来自一个客户的,所以,当使用服务端HttpSession存储会话数据的时候客户端的每个请求都应该包含一个session的标识(sid, jsessionid 等等)来告诉服务端;
6、会话数据保存在服务端(如HttpSession)的好处是减少了HTTP请求的长度,提高了网络传输效率;客户端session信息存储则相反;

7、客户端Session存储只有一个办法:cookie(url rewritting和hidden input因为无法做到持久化,不算,只能作为交换session id的方式,即a method of session tracking),而服务端做法大致也是一个道理:容器有个session管理器(如tomcat的org.apache.catalina.session包里面的类),提供session的生命周期和持久化管理并提供访问session数据的api;

8、使用服务端还是客户端session存储要看应用的实际情况的。一般来说不要求用户注册登录的公共服务系统(如google)采用cookie做客户端session存储(如google的用户偏好设置),而有用户管理的系统则使用服务端存储。原因很显然:无需用户登录的系统唯一能够标识用户的就是用户的电脑,换一台机器就不知道谁是谁了,服务端session存储根本不管用;而有用户管理的系统则可以通过用户id来管理用户个人数据,从而提供任意复杂的个性化服务;

9、客户端和服务端的session存储在性能、安全性、跨站能力、编程方便性等方面都有一定的区别,而且优劣并非绝对(譬如TheServerSide号称不使用HttpSession,所以性能好,这很显然:一个具有上亿的访问用户的系统,要在服务端数据库中检索出用户的偏好信息显然是低效的,Session管理器不管用什么数据结构和算法都要耗费大量内存和CPU时间;而用cookie,则根本不用检索和维护session数据,服务器可以做成无状态的,当然高效);

10、所谓的“会话cookie”简单的说就是没有明确指明有效期的cookie,仅在浏览器当前进程生命期内有效,可以被后继的Set-Cookie操作清除掉

Genesis物理引擎实战指南:轻量级确定性刚体仿真核心 刚体物理仿真作为机器人控制、嵌入式运动学验证和确定性游戏开发的基础技术,其核心在于数值稳定性、跨平台可复现性与约束求解精度。本文围绕线性互补问题(LCP)求解、半隐式欧拉积分和零依赖C++实现三大关键技术展开,解析如何在无GUI、低算力环境下构建可单步调试、帧级可控的确定性仿真系统。重点覆盖碰撞检测数学建模、关节局部坐标系绑定、质量-惯性张量一致性校验等工程落地关键点,适用于STM32、树莓派及教育实验场景。内容深度结合Genesis Physics Engine的源码实践,直击‘穿模’‘NaN’‘关节发软 阅读详情

相关推荐

深入解析MATLAB四旋翼仿真案例asbQuadcopter的核心模块与优化技巧

本文深入解析了MATLAB/Simulink中的四旋翼无人机官方案例asbQuadcopter,详细拆解了其指令、传感器、控制器、本体与环境等核心模块的工作原理。重点探讨了经典的PID双环控制结构、传感器噪声模拟、模型替换方法以及系统化的PID参数调优技巧,旨在帮助用户从“开箱即用”过渡到深度定制与优化,构建更精准的仿真模型。

weixin_29171087的博客 363

HttpSession

1. HttpSession概述 HttpSession是由JavaWeb提供的,用来会话跟踪的类。session是服务器端对象,保存在服务器端! HttpSession是Servlet三大域对象之一(request(请求)、session(会话)、application(ServletContext)(应用)),所以它也有setAttribute()、getAttribute()、remove...

QAQ123666的博客 4612

点云中的Minkowski卷积

一、MinkowskiEngine简介 第一次见到MinkowskiEngine,应该是在两个月之前了,当时也没有去留意这个库。最近读了一些点云的论文,发现还是有不少论文的源码是基于MinkowskiEngine的,包括PointContrast(ECCV 2020),DGR(Deep Global Registration, CVPR 2020),Learning Multiview 3D Point Cloud Registration(CVPR 2020)和FCGF(Fully Convolution

zhulf0804的博客 7907

HttpSession的常见用法(javaWeb)

HttpSession的常见用法(javaWeb) 一、HttpSession的概述: 二、获取HttpSession对象: 三、HttpSession对象的常用方法: 1、获取Session会话中指定名称的对象: 2、获取绑定在该Session会话中所有的对象名称: 3、获取Session会话被创建的时间: 4、获取客户端最后一次发送该Session会话相关请求的时间: 5、获取分配给该Session会话的唯一标识符(字符串): 6、获取Servlet容器保持该Session会话访问的最大时间间隔:

zhan_qian的博客 4987

【一张图系列】别再混淆了!5分钟搞懂ERP、MES、PLC的职责边界与数据流》

《ERP、MES、PLC系统边界与协作解析》一文清晰阐述了制造业三大核心系统的角色分工与数据流转。文章将ERP比作企业"大脑"负责战略规划,MES作为车间"指挥官"负责执行调度,PLC则是设备"士兵"执行具体操作。通过一张架构图展示了从计划层到控制层的完整信息流:蓝色箭头表示指令下行(ERP→MES→PLC),橙色箭头代表数据上行反馈(PLC→MES→ERP)。文章强调理清系统边界对数字化转型、部门协作和项目实施的关键作用,并预告下期将深入解析ME

「东哥说MES」 专注于MES制造执行系统,为你拆解核心架构、功能模块及与ERP/PLC的集成逻辑。提供从入门到精通的系列干货、精选行业报告与实用工具,构建你的数字化知识体系,关注我,用实战经验照亮你的数字化之路。 973

Typora绘制思维导图

我们观察一下,其实思维导图就是树状结构的数据嘛,作为程序员,拿语言写树状结构的数据是很平常的事情。而且写代码可比画图省事多了,查阅资料可以知道,有一种`mermaid`语法,就是做这件事情的,支持 UML,甘特图,流程图等。

Peter Cheung的博客 7933

SpringBoot+外部Tomcat启动报错 .NoClassDefFoundError: javax/servlet/http/HttpSessionIdListener`

环境 Tomcat版本:7.0 maven中的servlet-api版本为3.1.0 <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <scope>provided</scope> <version>3.1.0&l

thewindkee的博客 6868

2025必备:C#上位机自动更新方案,支持断点续传与版本回滚(附完整源码)

摘要:工业上位机自动更新方案解析 本文针对工业现场上位机更新效率低下、风险高的问题,提出了一套完整的自动更新解决方案。该方案包含四个核心模块:版本检测(后台比对版本)、断点下载(支持网络中断续传)、安装更新(自动备份旧版本)和版本回滚(更新失败快速恢复)。通过独立更新工具与主程序解耦的设计,实现了"不影响生产+有退路"的工业级更新要求。方案基于.NET Framework开发,采用HTTP协议通信,包含详细的代码实现和工业场景适配说明,解决了U盘更新效率低、网络不稳定导致下载失败、更新后

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 957

HttpSession详解(简称session)

session概述 Session表示会话,不止是在javaweb中存在,只要是web开发,都有会话这种机制。 在java中会话对应的类型是:javax.servlet.http.HttpSession,简称session/会话 在java web中session是一个存储在WEB服务器端的java对象,该对象代表用户和WEB服务器的一次会话。 那什么才叫一次会话呢? 一般多数情况下,是这样描述的:用户打开浏览器,在浏览器上进行一些操作,然后将浏览器关闭,表示一次会话结束。 本质上的描述:从sess

hcz666的博客 2万+

卷积码Viterbi译码算法原理及C语言实现

具体而言,卷积码的编码过程是将输入数据和编码器中的状态进行异或操作,输出码字为各个状态对应的结果。Viterbi译码算法是一种最大似然译码算法,根据接收到的含有噪声的码字,寻找出最有可能的原始数据序列。(2) 递推计算:根据接收到的码字和当前状态,计算下一时刻各个状态的路径度量,并记录每个状态的前驱状态。以上代码实现了一个简单的卷积码Viterbi译码算法,通过接收到的码字进行译码,并输出解码结果。(1) 初始化:将所有状态的路径度量初始化为一个很大的值,选择路径度量最小的状态作为起始状态。

2301_79331421的博客 826

零件边界线提取处理原理详解

该程序提出了一种高效的点云边界提取方法,通过三阶段处理流程实现零件几何特征的精确提取。首先采用RANSAC算法进行坐标系标准化,包括主平面检测、点云分割和双重旋转对齐。接着使用凹包算法和RANSAC直线拟合提取底面边界。最后通过多方向密度切片分析(Z向100片、X向50片),自动选择高密度切片进行边界提取和直线拟合。算法具有鲁棒性强、处理效率高(支持OpenMP并行计算)和参数可配置等特点,能有效提取零件的几何边界特征,为后续质量检测提供基础。实验结果显示该方法能准确提取零件的多方向边界线。

weixin_45196569的博客 433

java.lang.ClassNotFoundException: javax.servlet.http.HttpSessionIdListener

java.lang.ClassNotFoundException: javax.servlet.http.HttpSessionIdListener 问题背景:1.maven项目 2.tomcat发布的时候出现该异常,虽然报的是缺少类,但查看lib文件下发现有servlet-api的jar,印象中tomcat的lib文件夹下也有,那应该就是jar冲突的问题 解决思路:1.

甘韦的博客 9117

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

HttpSession , HttpSessionListener , HttpSessionBindingListener , HttpSessionAtributeListener

一个session就是一系列某用户和服务器间的通讯。服务器有能力分辨出不同的用户。一个session的建立是从一个用户向服务器发第一个请求开始,而以用户显式结束或session超时为结束。 其工作原理是这样的: 1.当一个用户向服务器发送第一个请求时,服务器为其建立一个session,并为此session创建一个标识号; 2.这个用户随后的所有请求都应包括这个标识号。服务器会校对这个标识号以

kjfcpua的专栏 737

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

内置对象session和HTTPSession对象是同一个东西吗?

Session在网络中被称为会话。由于HTTP协议是一种无状态的协议,也就是当一个客户端发送请求,服务器端收到请求,并返回响应后,该连接就结束了,而服务器不保存任何相关的信息。为了弥补这一缺点,HTTP协议提供了session。通过session可以在应用程序的web页面间进行跳转时,保存用户的状态,使得整个用户会话一直存在下去,直到浏览器关闭。一个session就是一系列某用户和服务器间的通讯。服务器有能力分辨出不同的用户。一个session的建立是从一个用户向服务器发第一个请求开始,而以用户显式结束..

LNGMB的博客 679

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

HttpSession详解

HttpSession详解 Session可以做什么 网上商城中的购物车 保存登录用户的信息 将数据放入到 Session 中,供用户在访问不同页面时,实现跨页面访问数据 防止用户非法登录到某个页面 详解 HttpSession是Java Servlet API中用于管理用户会话的核心组件,它允许Web应用程序在服务器端存储和检索与单个用户相关的状态信息。以下是关于HttpSession的详...

年轻就是资本的专栏 1245

HttpSession详解【JAVAEE基础】

21.HttpSession详解 【基本了解】 1.Session 表示会话,不止是所在javaweb中存在,只要是web开发,都有该机制 2.在java中对应的类型是:java.servlet.http.HttpSession,简称session会话 3.Cookie可以将会话状态保存在客户端,HttpSession可以将会话状态保存在服务器端。 4.HttpSession对象是一个会话级别的对象,一次会话对应一个HttpSession对象 5.一次会话: "初步理解":用户打开浏览器,在浏览器上发送

liudachu的博客 1787

Java Servlet 实战入门教程-14-servlet 监听器 listener

Listener 接口 详解 Servlet Context Events 事件类型 描述 监听器接口 生命周期 Servlet上下文刚刚创建并可用于服务它的第一个请求,或者Servlet上下文即将关闭 javax.servlet.ServletContextListener 属性更改 在 Servlet 上下文的属性已添加、删除、或替换。 jav...

李思苇 371

HttpSession使用方法及原理

1.用户调用登录接口2.存储用户的session信息(新生成或者读取老的),并返回前端JSESSIONID3.浏览器将JSESSIONID存储至 cookie中//1.根据cookie带过来的JSESSIONID,通过键值对关系,来获取session2.根据session来获取user用户信息//参数为false情况下,获取session(但不会自动创建一个空的,不存在则返回null)

菊头蝙蝠的博客 2318

06Cookie&Session-10. HttpSession实现原理分析

06Cookie&Session-10. HttpSession实现原理分析*

学无止境 577

[转]httpSession的正确理解

关于HttpSession的误解实在是太多了,本来是一个很简单的问题,怎会搞的如此的复杂呢?下面说说我的理解吧: 一个session就是一系列某用户和服务器间的通讯。服务器有能力分辨出不同的用户。一个session的建立是从一个用户向服务器发第一个请求开始,而以用户显式结束或session超时为结束。 其工作原理是这样的: 1.当一个用户向服务器发送第一个请求时,服务器为其建立一个sessi...

akalius的专栏 2038

HttpSession简单介绍

简介: HttpSession是由JavaWeb提供的,用来会话跟踪的类.session是服务端对象,保存在服务器端. HttpSession是Servilet三大域对象之一(request,session,application),所以可以通过get/set/removeAttribute设置属性 HttpSession底层依赖Cookie,或者URL重写,因为需要靠它们获取sessionId...

Student108的博客 1000

HttpSession基础

HttpSession基础背景什么是session怎么使用sessioncookie和session的区别和联系 背景 我们都知道,在开发web项目的时候,客户端(浏览器端)与服务器端是需要交互的,客户端给服务器端request请求,服务器端给客户端response响应,这一来一回是需要通过HTTP协议实现的,而HTTP协议是无状态的,它将每一次请求视为一个完全独立的个体,也就是说它不知道这一次的请求与上一次的请求是否有关,是否是已经登陆过的用户发送的请求。所以就需要引入一个跟踪用户会话的机制,让服务器知道

weixin_51697044的博客 2344
上一篇: HttpSession相关的监听器
下一篇: 小说HibernateDaoSupport类的使用
麻烦的书虫
博客等级 码龄17年 19粉丝 6原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值