session简介
http是一个无状态的协议,为了实现与特定客户端的会话通信,servlet提供了session会话跟踪机制,为此提供了一个简单的HttpSession接口供开发者调用实现。
session的会话跟踪机制
Cookies
session的会话跟踪机制少不了http cookies的帮助。
容器发送一个cookie到客户端,客户端会记录cookie,客户端再次访问相同地址的时候会把保存的cookie返回给服务器。通过在cookie中增加一个唯一的标识属性即可实现会话跟踪的机制。
通常在cookie中增加JESSIONID作为这个唯一标识,其值是容器产生的一个唯一id。
SSL Sessions
在安全套接字层,HTTPS协议使用加密技术,使用一个客户端的多个请求作为session的一部分,然后servlet容器使用这些请求的数据来生成一个session。
URL 重写(我觉得叫 URL参数冗余 比较合适)
URL重写是最低性能的会话跟踪机制。
当客户端不接受cookie时,URL可能会作为一个基本的会话跟踪。
URL重写包括一个附加的数据,一个session id,这样的URL会被引擎解析和一个session相关联。
session id必须经过编码,作为URL中的路径参数,参数的名字必须是jsessionid。
例如:
http://www.myserver.com/catalog/index.html;jsessionid=1234
会话的完整性
当客户端不支持使用cookie的时候,web容器必须支持HTTP的session机制,所以web容器一般要支持URL重写机制。
创建一个session
当客户端不知道这个session的存在时,它被认为是一个新的session;
servlet设计者必须考虑到客户端不能加入session的情况。
session的范围
HttpSession对象的作用域是应用级别的;
虽然用于session的cookie可以服务于不同的上下文,但一个HttpSession实例只服务于一个会话。
例如:一个servlet A用RequestDispatcher去调用另一个web应用中的另一个servlet B,用于A和B的session一定是两个不同的session。
session中绑定参数
servlet可以通过一个name将对象绑定到session中。
在同一个servletContext中的处理同一个请求的其他servlet对session中绑定的对象都是可见的。
实现接口HttpSessionBindingListener的对象可以获得对象在session中绑定或删除的通知信息。
主要方法是:
session超时
在http协议中,没有一个明确的信号来标识客户端是否有效。所以只能使用超时作为验证客户端有效的机制。
默认的超时时间是servlet容器设定的,可以通过HttpSession接口的getMaxInactiveInterval方法来获取,也可以使用setMaxInactiveInterval方法自定义设置。
超时时间是以秒为单位的,如果设置为-1,那么session永不过期。
当调用session的所有servlet都退出service方法后,这个session就被认定为失效的,后续新的请求都不能再使用它。
最后访问时间
在当前的请求中用HttpSession接口的getLastAccessedTime可以获得最后一次访问session的时间。
重要的会话语义
线程问题
多线程的请求处理可能同时引用的同一个session对象,开发者要注意session的同步问题。
分布式环境
分布式的应用中,一个session的多个请求必须一次被同一个jvm处理。
容器必须能够处理所有通过setAttribute和putValue设置到session的对象。
为此,需要有下面的限制条件:
- 容器必须能够访问实现了Serializable接口的对象
- 容器可以选择存储session中指定的对象
- session的迁移必须由容器特殊设备来处理
客户端语义
由于cookies或SSL证书都是被web浏览器访问过程控制的,与任何特殊的window窗口浏览器是没有关系的。
从客户端的窗口发出的请求可能是同一个会话,所以开发者可以认定从客户端窗口访问的请求可以作为同一个会话。
分享到:
相关推荐
本系统采用经典的Java Web开发技术——jsp、servlet和javabean,构建了一个功能完备、操作简便的学报管理系统。 首先,我们来了解这三种技术的核心概念: 1. **JSP(JavaServer Pages)**:JSP是一种动态网页技术...
JavaWeb开发中的三大框架——Struts、Hibernate和Spring,是企业级应用开发的常用工具,它们各自承担着不同的职责,共同构建出高效、稳定的Web应用程序。以下是对这三大框架的详细解析。 1. **Struts框架** Struts...
【标题】"7个JSP小项目源代码和笔记资料汇总源码整理"涉及的是Java Web开发中的一个重要技术——JSP(JavaServer Pages),它是一种动态网页开发技术,结合了HTML、JavaScript和Java代码,用于构建服务器端的交互式...
Struts使用JSP作为视图层,Servlet作为控制器,以及一个持久化的模型层。 #### Struts框架中的XML配置文件 在Struts框架中,`struts-config.xml`文件扮演着非常重要的角色,它用于定义应用程序的行为和组件之间的...
### Java高级面试框架知识点整理 #### Struts框架详解 **1. Struts框架的基本结构** - **MVC模式实现:** Struts是一个基于MVC(Model-View-Controller)模式的Web应用框架,其中Controller部分主要由一个Servlet...
"狂神版"很可能指的是由某位知名讲师或专家整理的一套JavaWeb学习资源,这个压缩包可能包含了一个完整的JavaWeb项目实例——SMBMS。 SMBMS(Small and Medium Business Management System)可能是小型和中型企业...
### Java学习路线图知识点概述 ...以上就是根据提供的文档内容整理出的Java学习路线图的相关知识点。这些资源涵盖了从Java基础到高级框架的各个方面,非常适合Java初学者和希望提升技能的开发者参考学习。
这可能意味着文件中包含的Oracle和JSP知识是针对特定应用场景——例如一个名为“egis_pis”的系统——进行的实践总结。 综合以上信息,这份压缩包文件是关于Oracle数据库管理与JSP开发的实战教程或个人学习记录。它...
《基于Java的网上体育用品销售系统——以JSP技术实现》 本文将深入探讨一个以Java为核心、JSP为前端展示技术的网上体育用品销售系统的设计与实现。这个项目不仅适用于计算机专业学生的毕业设计,也适合课程设计,...
以上是根据提供的题目内容整理出的相关知识点,涵盖了面向对象的基本概念、Java基础类型与容器类的使用、异常处理机制、Servlet的基础知识以及EJB的基本原理等方面。这些知识点对于准备Java面试和技术提升都非常有...
而越来越多专业知识的 Blog 的出现,让我们看到了 Blog 更多所蕴涵的巨大的信息价值:不同的 Blog 选择不同的内容,收集和整理成为很多人关注的专业 Blog ——目前越来越多的人获取信息的来源是一些固定的 Blog 。...