- 浏览: 431399 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (164)
- Lucence (1)
- Hibernate (16)
- java综合技术点 (31)
- struts (4)
- dwr (2)
- IT生活 (21)
- spring (12)
- tomcat (1)
- 数据库 (11)
- tags (0)
- 线程安全 (11)
- 设计模式 (1)
- 缓存 (4)
- WebService (5)
- Apache软件 (7)
- java定时器 (1)
- plugin开发用插件 (3)
- Web前端 (5)
- js (3)
- Android (2)
- 摘抄 (0)
- jdbc (1)
- FTP (1)
- jetty (1)
- 图表 (1)
- Exception (1)
- 问题点整理 (1)
- 备忘录 (2)
- 分布式 (0)
- hadoop (0)
- JVM (5)
- GC (1)
- 消息中间件 (0)
最新评论
-
honganlei:
个人推荐一个,虽然是第三方的,但是提供的都是官方下载地址htt ...
常用jar包下载地址 -
chengt:
java jar包下载我一般用以下两个网站都可以http:// ...
常用jar包下载地址 -
songshuaiyang:
angryid 写道国内的网站,速度还可以jar包下载网站打不 ...
常用jar包下载地址 -
angryid:
国内的网站,速度还可以jar包下载网站
常用jar包下载地址 -
angryid:
我必须要评论一下,我发现一个jar包下载网站,javaeye的 ...
常用jar包下载地址
服务端自动创建的session对象,过期时间tomcat默认是30分钟
2 servlet容器就是你所有的应用服务器(如Tomcat),服务器的主要功能就是创建和维护servlet类所需的一些实例(如 doPost(HttpServletRequest req,HttpServletResponse res)中的req和res 对象及ServletContext对象,所以当你在不同的页面会话时,就不需自己创建这些对象,只要拿到这些对象用就行了,servlet容器就创建的HttpSession对象,也就是你通过HttpSession session=res.getSession();所获取的对象。
一个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操作清除掉
发表评论
-
RSA算法 非对称加密算法/数字签名算法
2015-12-09 16:42 986转自 http://security.group.iteye ... -
加密解密、签名验签
2015-12-09 16:29 499转自http://lvbin0502.iteye.com/b ... -
深入理解JVM
2014-09-25 17:32 716转自 http://blog.sina.com.cn/s/b ... -
LinkedHashMap和HashMap、HashTable的比较使用
2014-07-11 09:45 857转自 http://www.cnblogs.com/hubi ... -
java日期函数处理
2013-09-29 16:53 964Calendar cal = GregorianCalenda ... -
对象池技术
2011-03-21 17:11 59591 对象池技术的原理: 对象池技术在服务器开发上应用 ... -
JAVA开发者最常去的20个英文网站
2011-03-21 16:58 983转自 http://topmanopensource. ... -
日期工具类
2011-02-16 16:34 1074转自 http://www.iteye.com/topic/ ... -
log4j
2011-01-27 09:05 1002好处:便于维护与管理,如果系统崩溃或被黑客攻击,查日志就知 ... -
正则顺口溜
2011-01-22 11:21 1036http://cons-mora.iteye.com/blog ... -
Pattern和Matcher
2011-01-22 11:00 2542转载 http://liujinpan75.iteye.com ... -
java正则表达式
2011-01-22 10:35 976http://geeksun.iteye.com/blog/3 ... -
正则表达式的用法
2011-01-22 10:31 919http://cool1314521ok-qq-com.ite ... -
定时执行案例二
2011-01-12 17:13 1235http://blog.sina.com.cn/s/bl ... -
java定时器 schedule和scheduleAtFixedRate区别
2011-01-12 16:57 7513转自http://wangzjie.iteye.c ... -
java定时器案例
2011-01-12 15:52 1296转自http://tomenjoy.iteye.com/blo ... -
java定时器
2011-01-12 15:45 927转自 http://qinshanwu.iteye.com/b ... -
java对象的序列化和反序列化
2010-12-28 22:07 827转自http://www.iteye.com/topi ... -
架构师面试题参考
2010-12-11 13:30 9992一、牛人出的面试题如 ... -
Java的垃圾回收机制
2010-12-11 13:28 1226Java的垃圾回收机制是Java虚拟机提供的能力,用于在空闲时 ...
相关推荐
标题中的“httpSession”指的是HTTP...总的来说,httpSession是Web开发中不可或缺的一部分,理解其原理和正确使用方式对于构建健壮的、高可用的应用程序至关重要。通过学习和实践,我们可以更好地掌握这一核心技术。
理解其工作原理和最佳实践,能帮助我们更有效地构建和维护Web应用程序。同时,结合JDBC等其他技术,可以构建出更加健壮和高效的系统。在实际开发中,合理利用接口和类,遵循设计模式,可以使代码更具可扩展性和可...
首先,我们需要理解WebSocket与HttpSession的基本概念。WebSocket API是HTML5引入的一个新特性,它允许服务器主动向客户端推送数据,创建持久连接,使得服务器与客户端之间可以进行全双工通信。而HttpSession则是在...
这个小实例将帮助我们理解如何在实际应用中结合Java、session以及验证码技术。 首先,我们需要生成验证码。这通常涉及到以下几个步骤: 1. **生成随机字符串**:验证码的生成通常包括创建一个包含随机字母和数字的...
在IT行业中,尤其是在Web开发领域,`HttpSession`、`jsp`和`servlet`是三个非常重要的概念。这里我们将深入探讨这些技术,并结合一个名...通过深入理解和熟练掌握这些技术,你可以构建出更强大、更灵活的Web应用程序。
这个压缩包"servletapi.rar"包含了一些关键的JAR文件,它们对于理解和使用Java Enterprise Edition (Java EE) 平台上的Servlet和相关技术至关重要。在这个压缩包中,我们主要关注以下几个文件: 1. **HttpSession**...
... ... 当用户第一次访问 Servlet 时,服务器端会给用户创建一个独立的 ...通过了解 HTTP 会话的原理、域、创建、身份验证原理、何时创建 HTTP 会话、获取 HTTP 会话对象和生命周期,可以更好地理解和应用 HTTP 会话技术。
为了解决这个问题,Web开发者使用了会话跟踪技术,如Servlet中的HttpSession对象。 会话(session)是在用户与服务器交互的过程中,一系列连续的请求和...正确理解和使用会话跟踪技术是构建动态Web应用程序的基础。
### Session的使用详解 #### 一、Session概念与工作原理 **Session** 是一种服务器端技术,用于在用户的多个请求之间保持数据。...正确地理解和使用 HttpSession 对于构建稳定可靠的 Web 应用程序至关重要。
在这个"Servlet的四种信息交互.zip"压缩包中,包含了关于ServletContext、Cookie、HttpSession以及HttpServletRequest这四种主要交互方式的实例。以下是对这些知识点的详细讲解: 1. **ServletContext**: ...
### 深入理解和改进 JSP Servlet 会话管理机制 #### 一、引言 在Web应用开发中,会话管理是确保用户状态和数据安全传输的关键技术之一。由于HTTP协议本身是一种无状态的协议,因此对于需要维护用户状态的应用而言...
vletContextAttributeEventscar) 若有对象自Application的范围移除,通知正在收听的对象 voidattributeReplaced...正确理解和运用Servlet监听器,对于构建高性能、高可用的Web应用至关重要。
Spring Websocket是Spring框架的一部分,专门用于实现WebSocket通信。...Spring Websocket使得在Java应用中集成...通过理解这些概念和实践,开发者可以构建实时、低延迟的应用,如聊天应用、股票行情更新、在线游戏等。
【Java Web 电子稿】是基于《Java Web编程技术》课程的教学材料,旨在通过一系列的实验帮助学生理解和掌握Web开发中的关键概念。本实验指导书共计15个实验,每个实验设计为2学时,适合每周完成一个,以确保学生能够...
首先,让我们理解Servlet的基本概念。Servlet是Java提供的一种服务器端的编程接口,它允许我们扩展Web服务器的功能。在Java Web应用中,Servlet负责接收HTTP请求,处理业务逻辑,然后生成响应发送回客户端。在这个...
Request、Session 作用域的理解 Request 作用域: * Request 作用域是指在当前请求中有效的信息共享范围 * 在 Servlet/JSP 中,Request 作用域是通过 HttpServletRequest 接口实现的 * Request 作用域的信息共享是...
首先,我们需要理解“物理网址”(Physical URL)的概念。物理网址是指服务器上实际文件的路径,它包含了服务器的IP地址或域名以及文件的完整路径。在Web应用中,这通常用于指示Web服务器上的静态资源或动态脚本的...
- 在服务器端,开发者通常会使用各种Web框架提供的Session管理功能,例如在Java的Spring框架中,Session的相关操作可以通过HttpSession对象来实现。当创建一个Web应用时,框架会提供获取和设置Session属性的方法。 ...
目录: 一、术语session 二、HTTP协议与状态保持 三、理解cookie机制 四、理解session机制 五、理解javax.servlet.http.HttpSession 六、HttpSession常见问题 七、跨应用程序的session共享 八、总结