`

j2ee中关于Session的生命周期详解

 
阅读更多
在谈论session机制的时候,常常听到这样一种误解“只要关闭浏览器,session就消失了”。其实可以想象一下会员卡的例子,除非顾客主动对店家提出销卡,否则店家绝对不会轻易删除顾客的资料。对session来说也是一样的,除非程序通知服务器删除一个session,否则服务器会一直保留,程序一般都是在用户做log off的时候发个指令去删除session。然而浏览器从来不会主动在关闭之前通知服务器它将要关闭,因此服务器根本不会有机会知道浏览器已经关闭,之所以会有这种错觉,是大部分session机制都使用会话cookie来保存session id,而关闭浏览器后这个session id就消失了,再次连接服务器时也就无法找到原来的session。如果服务器设置的cookie被保存到硬盘上,或者使用某种手段改写浏览器发出的 HTTP请求头,把原来的session id发送给服务器,则再次打开浏览器仍然能够找到原来的session。 .

恰恰是由于关闭浏览器不会导致session被删除,迫使服务器为seesion设置了一个失效时间,当距离客户端上一次使用session的时间超过这个失效时间时,服务器就可以认为客户端已经停止了活动,才会把session删除以节省存储空间。 !


session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。 
  
  当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识   -   称为session   id,如果已包含一个session   id则说明以前已经为此客户端创建过session,服务器就按照session   id把这个session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含session   id,则为此客户端创建一个session并且生成一个与此session相关联的session   id,session   id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session   id将被在本次响应中返回给客户端保存。 
  
  1、session在何时被创建 
  一个常见的误解是以为session在有客户端访问时就被创建,然而事实是直到某server端程序调用 HttpServletRequest.getSession(true)这样的语句时才被创建,注意如果JSP没有显示的使用   <%@page   session="false"%>   关闭session,则JSP文件在编译成Servlet时将会自动加上这样一条语句HttpSession   session   =   HttpServletRequest.getSession(true);这也是JSP中隐含的session对象的来历。 
  
  由于session会消耗内存资源,因此,如果不打算使用session,应该在所有的JSP中关闭它。 
  
  2、session何时被删除
  综合前面的讨论,session在下列情况下被删除a.程序调用HttpSession.invalidate();或b.距离上一次收到客户端发送的 session   id时间间隔超过了session的超时设置;或c.服务器进程被停止(非持久session) 
  
  3、如何做到在浏览器关闭时删除session 
  严格的讲,做不到这一点。可以做一点努力的办法是在所有的客户端页面里使用javascript代码window.oncolose来监视浏览器的关闭动作,然后向服务器发送一个请求来删除session。但是对于浏览器崩溃或者强行杀死进程这些非常规手段仍然无能为力。 
  
  4、有个HttpSessionListener是怎么回事 
  你可以创建这样的listener去监控session的创建和销毁事件,使得在发生这样的事件时你可以做一些相应的工作。注意是session的创建和销毁动作触发listener,而不是相反。类似的与HttpSession有关的listener还有 HttpSessionBindingListener,HttpSessionActivationListener和 HttpSessionAttributeListener。
分享到:
评论

相关推荐

    J2EE应用开发详解代码

    10. **容器**:J2EE应用运行在特定的容器中,如应用服务器(如Tomcat、JBoss、WebLogic等),容器提供了运行环境和服务,例如部署、生命周期管理、安全管理等。 11. **部署描述符**:如`web.xml`和`ejb-jar.xml`,...

    j2ee实验二:学习使用Session和Cookie

    3. **设定Session生命周期**:设置Session的有效时间,以实现自动注销功能。 4. **开发一个下载文件的JavaEE Web应用**:创建一个能够提供文件下载服务的Web应用。 5. **开发一个Session监听器**:实现Session创建和...

    j2ee,ex2答案

    **J2EE基础与Session和Cookie详解** J2EE(Java 2 Platform, Enterprise Edition)是一种用于构建企业级分布式应用程序的平台,它提供了多种服务、API和协议来支持多层架构的应用开发。J2EE的核心组件包括Servlet、...

    J2EE 经典实例详解6

    **J2EE经典实例详解** J2EE(Java 2 Platform, Enterprise Edition)是Java平台...容器负责管理应用的生命周期,提供服务如事务管理、安全性、资源注入等。 ### 4. J2EE安全机制 J2EE提供了多种安全机制,包括角色基

    j2ee 经典实例详解

    - **EJB组件**:创建和部署会话Bean和实体Bean,理解其生命周期和调用方式。 - **Web服务**:创建和调用SOAP或RESTful Web服务,实现跨系统数据交换。 - **邮件服务**:利用JavaMail API发送电子邮件,实现通知功能...

    J2EE 经典实例详解13

    每个实例通常会涵盖一个特定主题,比如数据库连接池的配置、EJB的生命周期管理、JMS的实现、或是使用JSF创建用户友好的界面。通过这些实例,开发者可以加深对J2EE架构的理解,提升实际项目开发能力。 在提供的...

    J2EE应用开发详解(罗玉玲版)光盘内容(源代码)

    源代码可能包括了状态会话Bean(Stateful Session Bean)、无状态会话Bean(Stateless Session Bean)和实体Bean(Entity Bean),读者可以通过实际操作理解EJB的生命周期和事务管理。 4. **JMS(Java Message ...

    J2EE的六种范围类型

    在Java 2 Enterprise Edition (J2EE)框架中,范围(Scope)的概念非常重要,它定义了对象的生命周期和可见性。J2EE中定义了六种常见的范围类型:事务范围(Transaction)、请求范围(Request)、HTTP会话范围...

    j2ee 经典实例详解3

    书中的实例可能涵盖了Servlet的生命周期、会话管理、过滤器和监听器的使用等方面。 2. **JSP(JavaServer Pages)**:JSP是HTML和Java代码的混合,主要用于创建动态网页。它允许开发者在HTML页面中嵌入Java代码,...

    J2EE应用开发详解

    内容为J2EE应用开发详解中的源代码 第1章 Java Web应用开发简介 1 1.1 Java EE应用概述 1 1.2 Java EE概念 1 1.2.1 Java EE多层模型 1 1.2.2 Java EE体系结构 2 1.3 Java EE的核心API与组件 4 1.4 Web服务器和应用...

    J2EE 经典实例详解(1-100)

    实例可能涵盖了Servlet的生命周期、请求处理、会话管理、过滤器和监听器等内容。 2. **JSP开发**:JSP是用于生成动态网页的技术,它结合了HTML和Java代码。实例可能包含JSP脚本元素、表达式语言(EL)、自定义标签...

    J2EE中文帮助文档

    8. **Java Management Extensions (JMX)**: JMX允许开发人员监控和管理Java应用,包括配置、生命周期管理和性能监控。 **J2EE 1.3.1 API文档** J2EE 1.3.1 API.chm和J2EE 1.3.1 API.chw文件包含了J2EE 1.3.1版本的...

    J2EE的13种核心技术.pdf

    EJBs通过容器管理的事务、安全性、生命周期和并发控制,降低了开发复杂度。 #### RMI(Remote Method Invocation) RMI是一种实现Java对象远程调用的协议,允许一个Java虚拟机上的对象调用另一个虚拟机上的对象的...

    J2EE API(包含j2ee编程中的各个类)

    EJB容器管理对象的生命周期、并发访问和事务。 4. **Java Persistence API (JPA)**:JPA简化了与关系数据库的交互,提供了一种标准的方式来映射Java对象到数据库记录。它取代了传统的JDBC和Hibernate等ORM框架,...

    J2EE试题(j2ee)

    Servlet生命周期包括加载、初始化、服务、销毁四个阶段。 2. **JSP(JavaServer Pages)**:JSP是一种动态网页技术,允许开发者将HTML代码与Java代码混合编写,实现动态内容的生成。JSP页面在服务器端被转换为...

    J2EE Tutorial中文版

    J2EE应用运行在特定的容器中,负责管理组件生命周期、提供服务和实现标准接口。主要有两种容器: 1. **Web容器**:处理Web组件(Servlets、JSP),提供HTTP服务。 2. **EJB容器**:管理EJB组件,处理事务、安全性、...

    J2EE 经典实例详解(151-200)

    这部分可能包含对EJB生命周期的理解,以及如何创建和使用会话bean进行业务逻辑处理和持久化操作。 4. **JMS**:JMS允许应用程序之间发送和接收消息,实现异步通信。实例中可能会讲解如何设置消息队列,创建生产者和...

    J2EE详解

    Servlet生命周期包括加载、初始化、服务、销毁等阶段,通过web.xml配置文件来管理。 2. **JSP(JavaServer Pages)**:JSP是一种动态网页技术,允许在HTML中嵌入Java代码,实现了视图和控制逻辑的分离。JSP页面在...

    J2EE历年考试题目

    理解它们的工作原理、生命周期、以及如何在Web应用中部署和配置Servlet和JSP是考试的关键。 3. **JavaBeans**: JavaBeans是可重用的Java组件,常用于JSP页面中作为数据模型。考生需了解Bean的属性、方法、事件及...

    J2EE应用开发详解源代码.rar

    9. **容器管理**:J2EE容器负责初始化、管理和销毁组件,提供服务如安全性、事务、生命周期管理等。源代码中可能有注解或XML配置来表明组件如何与容器交互。 通过对这些源代码的深入学习,开发者可以提升自己在J2EE...

Global site tag (gtag.js) - Google Analytics