`
lbmydream
  • 浏览: 17334 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

HTTP会话使用与管理(一)(java web学习系列)

阅读更多
    多数Web应用,如购物网站、电子邮箱等,服务器必须能够追踪客户状态。Web服务追踪客户状态常用方法如下:
    在HTML表单中插入隐藏字段,包含客户状态数据;
    重写URL,使url包含客户状态数据;
    使用Cookie来传送用于追踪客户状态数据;
    使用会话机制(Session)。
    Http协议是无状态的,每次客户请求访问Web服务端的一个网页时,都必须与服务器建立一个FTP连接,然后再发送HTTP请求。在HTTP请求中加入额外用于追踪客户状态数据可以使服务器能够区分不同客户,以及避免服务器重启或者客户长时间未活动再次访问应用造成客户当前操作信息丢失等,提高应用的客户体验。
    会话机制是Web开发领域用于追踪客户状态的普遍解决方案,会话是指一段时间内,单个客户与Web应用的一连串交互过程。
    Web领域的会话也称HTTP会话,但会话并不是由HTTP协议制定(Http是无状态的)。Servlet规范制定了基于java会话的具体运作机制。在ServletAPI中定义了代表会的的javax.jttp.HttpSession接口,Servlet容器并需实现该接口。一次会话对应一个HttpSession对象,HttpSession对象由Servlet创建(应用servlet对象由Servlet容器创建),该对象可以存放客户状态信息,Servlet容器为每一个HttpSession对象分配一个唯一标示符,Session ID.   
    HttpSession生命周期:
    (1)创建时期,客户首次访问支持会话应用或再次访问会话销毁的应用,Servlet容器会创建新的HttpSession对象;
     (2) 活动时期 客户一系列连续的请求访问;
     (3) 会话销毁(浏览器进程终止、执行HttpSession对象invalidate()方法、会话过期)。
    HttpSession对象访问,jsp中可以直接通过jsp隐式对象session直接访问,HttpSevlet类中可以通过HttpServletRequest对象来获取HttpSession对象。
    重写URL来追踪会话,Servlet容器会在客户端浏览器保存一个Session ID,以后浏览器发出的HTTP请求就会包含这个ID,Servlet容器读取HTTP请求中ID,判断来个各个浏览器请求属于哪个会话的过程即为会话追踪。如浏览器支持Cookie,Servlet容器就把Session ID作为Cookie保存在浏览器中,但出于安全原因许多浏览器禁用Cookie,此时Servlet将采用另一只方式来追踪会话:重写URL,把Session ID添加到URL信息中,HttpServletResponse接口提供了该方法--public java.lang.String encodeURL(String url)。
    //修改前
    <a href="weblogin.jsp"></a>
    //修改后
    <a href="<%=response.encodeURL("weblogin.jsp")%>"></a>
    encodeURL方法执行过程,(1)先判断weblogin.jsp是否支持会话(jsp文件可以通过声明<%@page session="false"%>来指定页面不支持会话),此时链接依然为
<a href="weblogin.jsp" ></a>;(2) 判断浏览器是否支持Cookie,如支持就直接返回参数指定的URL,如不支持Cookie就在参数指定URL前添加SessionID信息,然后返回修改后的URL.此时URL链接形式如下<a href="weblogin.jsp;jsessionid=965436346445F01991DB6F68F"></a>
    会话持久化,在某些情况下Servlet容器将HttpSession对象从内存中转移到永久性存成设备中,在需要访问得时候再将它们加载到内存的这一过程即为会话持久化。会话持久化好处:
(1)节约内存空间,假设Web应用有万级用户时,在Servlet容器中会生成上万个HttpSession对象,如果将这些对象一直放在内存中,将耗费大量内存资源,因此将处于不活动状态下的Session对象转移到永久设备中,这样能提高对内存资源的利用率。(2)确保在服务器重启或者单个web应用重启后,能够恢复重启前会话。这样可以再服务器出现故障重启,客户再次访问应用可恢复重启前的操作信息,这样可以提高应用用户体验。
   把Seesion对象保存到永久性设备,采用了java对象序列化技术。在持久化会话时,Servlet容器不仅会持久化HttpSession对象,还回持久化所有可以序列化的属性,从而确保存放在会话范围内的共享数据不会丢失。其中序列化属性即为属性所属的类实现了java.io.Serializable接口(类必须实现该接口,否则在持久化HttpSession对象时不会持久化存放HttpSession该类对象)。会话在其生命周期中,可能会在运行时和持久化状态转换,运行时即为Session对象位于内存中(含活动状态、不活动状态),持久化状态主要特征为HttpSession对象位于永久性设备中。
   HttpSession从运行时状态转化为持久化状态过程称为搁置。当服务器终止或者单个web应用终止时,会话处于不活动状态时间太长,达到限定值,WEB应用中处于运行时会话太多,达到特定限定值情况下会话将会被搁置。HttpSession从持久化状态转化为运行时状态过程称为激活。当服务器重启或者单个应用重启时,应用中会话被激活;处于会话浏览器向应用发送http请求,相应会话被激活。
   会话的搁置和激活对客户端来说是透明的,当客户端与服务端交互时,客户端感觉上会认为会话始终处于运行时状态。
   java Servlet API并没有为会话持久化提供标准接口,会话持久化完全依赖Servelt容器的具体实现。如,tomcat采用会话管理器来管理会话,相关帮助文档路径为:
<CATALINA_HOME>webapps/docs/config/manager.html。tomcat的会话管理器包含org.apache.catalina.session.StandardManager类(标准会话管理器)和org.apache.catalina.session.PersistentManager类(提供更多灵活的管理会话功能)。
   标准会话管理器StandardManager,StandardManager是默认会话管理器。实现机制为:当tomcat服务器终止或者单个应用终止时,会对被终止的web应用的HttpSession对象进行持久化,把它保存在永久文件中:<CATALINA_HOME>/work/catalina/[hostname]/[application]/SESSION.ser
   持久化会话管理器PersistentManager,提供更多灵活会话管理功能,它把存放会话对象的永久性设备成为会话Store。PersistentManager具体以下功能:
   (1)当tomcat服务器终止或者单个应用终止时,会对被终止的web应用的HttpSession对象进行持久化,把它保存在Store中。
   (2) 具有容错功能,及时把HttpSession对象备份到会话Store中,当服务器意外关闭后在重启,可以从Store中恢复会话。
   (3) 可以灵活控制内存中会话对象数目,将部分会话对象转移到会话Store中。
    tomcat中会话Store的接口为org.apache.Catalina.Store并提供了两个实现该接口的类。
    org.apache.Catalina.FileStore和org.apache.Catalina.JDBCStore.

  

   
   
分享到:
评论

相关推荐

    Java Web 会话 聊天室

    【Java Web 会话 聊天室】项目是一个典型的基于Java技术栈的Web应用程序,主要涉及了Java Servlet、JSP(JavaServer Pages)以及Web会话管理等核心技术。在这个项目中,用户可以通过一个简单的聊天界面进行实时交流...

    java web学习课件

    Java Web学习课件主要涵盖了基于J2EE平台的Web应用开发技术,这是一套非常实用的学习资源,适合初学者和有经验的开发者进行复习和提升。J2EE(Java 2 Platform, Enterprise Edition)是Oracle公司提供的一个企业级...

    最佳java_web学习资料

    这份"最佳Java Web学习资料"压缩包显然是为了帮助开发者或学生系统地掌握这一领域的知识。 首先,让我们深入了解一下Servlet。Servlet是Java EE平台中的一个核心组件,用于扩展服务器的功能。它允许开发者创建动态...

    Java Web 整合开发 完全自学手册 源代码

    这本书旨在帮助读者全面掌握Java Web应用程序的开发技能,从基础到高级,涵盖了一系列核心概念和技术。通过源代码的学习,读者可以更直观地理解并实践这些知识点。 1. **Servlet与JSP**:Java Web开发中的两大基石...

    Java及java web学习教程

    在学习Java及Java Web的过程中,除了理解这些核心技术外,还需要掌握基本的Web概念,如HTTP协议、会话管理、cookies、MVC设计模式等。此外,了解数据库原理和SQL语言也是必不可少的,因为大多数Web应用都需要与...

    Java Web整合开发王者归来:Java Web.part3

    第8篇为工具篇,内容包括在Java Web项目中常用的开源工具框架、主要有版本管理工具SVN、日志工具commons-logging与Log4J、报表图形引擎JFreeChart、PDF组件iText等;第9篇为实战篇,内容为两个典型的应用系统:论坛...

    tomcat和java web源码

    Java Web是使用Java语言进行服务器端Web应用开发的一系列技术和框架的总称,包括Servlet、JSP(JavaServer Pages)、JavaBeans等。Tomcat则是一个开源的Java Servlet容器,它是Apache软件基金会的Jakarta项目的一...

    张龙 java web 课件

    张龙的Java Web课件很可能是为了帮助学习者深入理解这个领域而设计的一系列教学材料。在Java Web开发中,我们通常会涉及以下几个核心知识点: 1. **Servlet**:Servlet是Java Web的基础,它是一种Java类,用于扩展...

    Tomcat与Java Web

    Java Web开发涉及一系列技术,包括Servlet、JSP、JavaServer Faces (JSF)、Java Persistence API (JPA)、Java Transaction API (JTA)等,它们共同构建了基于Java的Web应用程序的基石。 【压缩包子文件的文件名称...

    基于java web 的个人图书管理系统

    【基于Java Web的个人图书管理系统】是一个以Java技术为核心的轻量级应用,旨在提供一个便捷的图书管理平台。系统利用了Web技术中的JSP(JavaServer Pages)进行动态页面渲染,Servlet作为控制器处理用户请求,而...

    Java Web开发实践教程源码ch10

    学习如何使用session对象来跟踪用户会话,是Java Web开发中的重要一环。在本章中,你可能涉及到会话超时、共享数据和跨页面传递信息等主题。 7. **部署描述符** 部署描述符(如web.xml)是Java Web应用的配置文件...

    Tomcat与Java Web开发技术详解

    《Tomcat与Java Web开发技术详解》是一本深入探讨如何使用Tomcat服务器和Java语言进行Web应用程序开发的专业指南。本书主要面向的是Java开发者,特别是那些希望掌握Java Web应用部署和管理技术的人群。 Tomcat是...

    java web整合开发王者归来光盘代码-第五章 会话跟踪

    在Java Web开发中,会话跟踪是至关重要的一个环节,特别是在构建复杂的Web应用程序时,如JSP、Servlet、Struts、Hibernate以及Spring等框架的整合应用。本资源"java web整合开发王者归来光盘代码-第五章 会话跟踪...

    电子商务系统JAVA web

    1. **Java Web基础**:Java Web是指使用Java技术栈进行Web应用开发的一系列技术,包括Servlet、JSP(JavaServer Pages)、JSTL(JavaServer Pages Standard Tag Library)等。Servlet是服务器端的Java小程序,用于...

    Tomcat与Java Web开发技术详解 第二版配套光盘源码

    《Tomcat与Java Web开发技术详解》第二版是一本深入探讨如何使用Apache Tomcat服务器进行Java Web应用程序开发的专业书籍。作者孙卫琴以其丰富的教学和实践经验,为读者提供了全面而细致的技术指南。这本书的配套...

    基于JAVA WEB的通讯簿管理系统(jsp)

    【基于JAVA WEB的通讯簿管理系统(jsp)】是一款利用Java Web技术实现的在线联系人...通过分析和理解这些知识点,你可以对基于JAVA WEB的通讯簿管理系统有一个全面的了解,并能够进一步学习和开发类似的Web应用程序。

    java Web系统开发

    这一章会教授如何创建和配置Servlet,处理HTTP请求和响应,以及如何利用Servlet进行用户会话管理。理解Servlet生命周期和部署描述符(web.xml)的配置也是学习的重点。 最后,第六章 "JavaBean技术基础知识" 引入了...

    张龙老师Java Web学习文档

    张龙老师的Java Web学习文档无疑为初学者和有经验的开发者提供了一条深入理解这一技术的有效途径。以下将详细介绍Java Web中的关键知识点。 1. **Servlet**:Servlet是Java Web应用的核心组件,它是一个Java类,...

    java web workspace 02

    【Java Web Workspace 02】是一个专为Java Web开发打造的工作空间,包含了多个项目和代码资源,便于开发者进行学习和实践。在这个工作空间中,我们可以深入理解Java Web开发的关键技术,包括Servlet、JSP、MVC框架...

Global site tag (gtag.js) - Google Analytics