`
jinnianshilongnian
  • 浏览: 21436291 次
  • 性别: Icon_minigender_1
博客专栏
5c8dac6a-21dc-3466-8abb-057664ab39c7
跟我学spring3
浏览量:2405437
D659df3e-4ad7-3b12-8b9a-1e94abd75ac3
Spring杂谈
浏览量:2998016
43989fe4-8b6b-3109-aaec-379d27dd4090
跟开涛学SpringMVC...
浏览量:5631699
1df97887-a9e1-3328-b6da-091f51f886a1
Servlet3.1规范翻...
浏览量:257622
4f347843-a078-36c1-977f-797c7fc123fc
springmvc杂谈
浏览量:1593292
22722232-95c1-34f2-b8e1-d059493d3d98
hibernate杂谈
浏览量:249006
45b32b6f-7468-3077-be40-00a5853c9a48
跟我学Shiro
浏览量:5847847
Group-logo
跟我学Nginx+Lua开...
浏览量:698249
5041f67a-12b2-30ba-814d-b55f466529d5
亿级流量网站架构核心技术
浏览量:780592
社区版块
存档分类
最新评论

Servlet3.1规范翻译——Session

 
阅读更多

 

会话

超文本传输协议(HTTP)被设计为一种无状态协议。为构建有效的Web应用,必须与来自一个特定的客户端的请求彼此是相互关联。随时间的推移,演变了许多会话跟踪机制,这些机制直接使用对程序员而言是困难或麻烦的。

该规范定义了一个简单的HttpSession接口,允许servlet容器使用几种方法来跟踪用户会话,而不会使应用开发人员陷入到这些方法的细节中。

7.1 会话跟踪机制

以下章节描述了跟踪用户会话(session)的方法。

7.1.1 Cookies

通过HTTP cookie的会话跟踪是最常用的会话跟踪机制,且所有servlet容器都应该支持。

 

容器向客户端发送一个cookie,客户端后续到服务器的请求都将返回该cookie,明确地将请求与会话关联。会话跟踪cookie的标准名字必须是JSESSIONID,所有3.0兼容的容器必须支持。容器也允许通过容器指定的配置自定义会话跟踪cookie的名字。

 

所有servlet容器必须提供能够配置容器是否标记会话跟踪cookieHttpOnly。已建立的配置必须应用到所有上下文中还没有建立特定的配置(SessionCookieConfig javadoc获取更多细节)

 

如果web应用为其会话跟踪cookie配置了一个自定义的名字,则如果会话id编码到URL中那么相同的自定义名字也将用于URI参数的名字(假如URL重写已开启)。

7.1.2 SSL会话

安全套接字层,在HTTPS使用的加密技术,有一种内置机制允许多个来自客户端的请求被明确识别为同一会话。Servlet容器可以很容易地使用该数据来定义会话。

7.1.3 URL 重写

URL重写是会话跟踪的最低标准。当客户端不接受cookie时,服务器可使用URL重写作为会话跟踪的基础。URL重写涉及添加数据、会话ID、容器解析URL路径从而请求与会话相关联。

 

会话ID必须被编码为URL字符串中的一个路径参数。参数的名字必须是jsessionid。下面是一个URL包含编码的路径信息的例子:

http://www.myserver.com/catalog/index.html;jsessionid=1234

URL重写在日志、书签、referer header、缓存的HTMLURL工具条中暴露会话标识。在支持cookieSSL 会话的情况下,不应该使用URL重写作为会话跟踪机制。

7.1.4 会话完整性

当服务的来自客户端的请求不支持使用cookie时,Web容器必须能够支持HTTP 会话。 为了满足这个要求, Web容器通常支持URL重写机制。

7.2 创建会话

当会话仅是一个未来的且还没有被建立时会话被认为是“新”的。因为HTTP是一种基于请求-响应的协议,直到客户端“加入”到HTTP 会话之前它都被认为是新的。当会话跟踪信息返回到服务器指示会话已经建立时客户端加入到会话。直到客户端加入到会话,不能假定下一个来自客户端的请求被识别为同一会话。

 

如果以下之一是true,会话被认为是“新”的:

客户端还不知道会话

客户端选择不加入会话。

 

这些条件定义了servlet容器没有机制能把一个请求与之前的请求相关联的情况。

Servlet开发人员必须设计他的应用以便处理客户端没有,不能,或不会加入会话的情况。

 

7.3 会话范围

HttpSession对象必须被限定在应用(或servlet上下文)级别。底层的机制,如使用cookie建立会话,不同的上下文可以是相同,但所引用的对象,包括包括该对象中的属性,决不能在容器上下文之间共享。

 

用一个例子来说明该要求: 如果servlet使用RequestDispatcher来调用另一个Web应用的servlet,任何创建的会话和被调用servlet所见的必须不同于来自调用会话所见的。

 

此外,一个上下文的会话在请求进入上下文时必须是可恢复的,不管是直接访问它们关联的上下文还是在请求目标分派时创建的会话。

 

7.4 绑定Session属性

servlet可以按名称绑定对象属性到HttpSession实现,任何绑定到会话的对象可用于任意其他的Servlet,其属于同一个ServletContext且处理属于相同会话中的请求。

 

一些对象可能需要在它们被放进会话或从会话中移除时得到通知。这些信息可以从HttpSessionBindingListener接口实现的对象中获取。这个接口定义了以下方法,用于标识一个对象被绑定到会话或从会话解除绑定时。

valueBound

valueUnbound

在对象对HttpSession接口的getAttribute方法可用之前valueBound方法必须被调用。在对象对HttpSession接口的getAttribute方法不可用之后valueUnbound方法必须被调用。

7.5 会话超时

HTTP协议中,当客户端不再处于活动状态时没有显示的终止信号。这意味着当客户端不再处于活跃状态时可以使用的唯一机制是超时时间。

 

Servlet容器定义了默认的会话超时时间,且可以通过HttpSession接口的getMaxInactiveInterval方法获取。开发人员可以使用HttpSession 接口的setMaxInactiveInterval 方法改变超时时间。这些方法的超时时间以秒为单位。根据定义,如果超时时间设置为0或更小的值,会话将永不过期。会话不会生效,直到所有servlet使用的会话已经退出其service方法。一旦会话已失效,新的请求必须不能看到该会话。

7.6 最后访问时间

HttpSession接口的getLastAccessedTime方法允许servlet确定在当前请求之前的会话的最后访问时间。当会话中的请求是servlet容器第一个处理的时该会话被认为是访问了。

7.7 重要的会话语义

7.7.1 多线程问题

在同一时间多个Servlet执行请求的线程可能都有到同一会话的活跃访问。容器必须确保,以一种线程安全的方式维护表示会话属性的内部数据结构。开发人员负责线程安全的访问属性对象本身。这样将防止并发访问HttpSession对象内的属性集合,消除了应用程序导致破坏集合的机会。

7.7.2 分布式环境

在一个标识为分布式的应用程序中,会话中的所有请求在同一时间必须仅被一个JVM处理。容器必须能够使用适当的setAttribute putValue 方法把所有对象放入到HttpSession类实例。以下限制被强加来满足这些条件:

容器必须接受实现了Serializable 接口的对象。

容器可以选择支持其他指定对象存储在HttpSession中,如Enterprise JavaBeans组件和事务的引用。

由特定容器的设施处理会话迁移。

当分布式servlet容器不支持必需的会话迁移存储对象机制时容器必须抛出IllegalArgumentException

分布式servlet容器必须支持迁移的对象实现Serializable的必要机制。

这些限制意味着开发人员确保除在非分布式容器中遇到的问题没有额外的并发问题。

 

容器供应商可以确保可扩展性和服务质量的功能,如负载平衡和故障转移通过把会话对象和它的内容从分布式系统的任意一个活跃节点移动到系统的一个不同的节点上。

 

如果分布式容器持久化或迁移会话提供服务质量特性,它们不限制使用原生的JVM序列化机制用于序列化HttpSession和它们的属性。如果开发人员实现session属性上的readObject writeObject 方法,他们也不能保证容器将调用这些方法,但保证Serializable结束它们的属性将被保存。

 

容器必须在迁移会话时通知实现了HttpSessionActivationListener的所有会话属性。它们必须在序列化会话之前通知钝化监听器,在反序列化之后通知激活监听器。

 

写分布式应用的开发人员应该意识到容器可能运行在多个Java虚拟机中,开发人员不能依赖静态变量存储应用状态。他们应该用企业Bean或数据库存储这种状态。

7.7.3 客户端语义

由于CookieSSL证书通常由Web浏览器进程控制,且不与浏览器的任意特定窗口关联,从客户端应用程序发起的到servlet容器的请求可能在同一会话。为了最大的可移植性,开发人员应该假定客户端所有窗口参与同一会话。


9
3
分享到:
评论
10 楼 jinnianshilongnian 2012-12-18  
zhaoyijun 写道
开涛老师,servlet3.0如何实现类的注入呢?不使用spring可以实现吗?

CDI
9 楼 zhaoyijun 2012-12-18  
开涛老师,servlet3.0如何实现类的注入呢?不使用spring可以实现吗?
8 楼 jinnianshilongnian 2012-12-16  
jyjava 写道
我看了之后的感觉是,内容并不像标题那样吸引人

规范的东西本来就是枯燥的 而且都是一笔带过,不涉及具体代码
7 楼 jyjava 2012-12-16  
我看了之后的感觉是,内容并不像标题那样吸引人
6 楼 jinnianshilongnian 2012-12-16  
xiangdefei 写道
楼主辛苦,,方便了我们这些英语不好的人。

5 楼 xiangdefei 2012-12-16  
楼主辛苦,,方便了我们这些英语不好的人。
4 楼 jinnianshilongnian 2012-12-16  
xzcgeorge 写道
楼主辛苦!

3 楼 xzcgeorge 2012-12-16  
楼主辛苦!
2 楼 jinnianshilongnian 2012-12-15  
yulongblue 写道
          

咋么个情况
1 楼 yulongblue 2012-12-15  
          

相关推荐

    JAVA WEB典型模块与项目实战大全

    7.5 指点迷津——session知识  7.6 统计在线人数功能  7.7 小结  第8章 网络购物车(jsp+servlet+javabean)  8.1 网络购物车原理  8.2 实现网络购物车功能  8.3 小结  第9章 搜索引擎(lucene+web ...

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    5.4 一夫当关——配置并应用Servlet过滤器 5.4.1 过滤器的基本原理 5.4.2 过滤器的核心API 5.4.3 过滤器的创建与配置 5.4.4 JavaWeb中字符乱码分析 5.4.5 实现字符编码过滤器 5.5 实战检验 5.5.1 通过Servlet实现...

    从Java走向Java+EE+.rar

    5.3 使用Eclipse和Tomcat开发Servlet实例——输出字符串响应 72 5.4 小结 77 第6章 JSP——前后台更好地分离 79 6.1 JSP的概念 79 6.2 JSP页面的组成 80 6.2.1 JSP的指令元素 82 6.2.2 JSP的脚本元素 ...

    Spring Security-3.0.1中文官方文档(翻译版)

    Spring Security-3.0.1 中文官方文档(翻译版) 这次发布的Spring Security-3.0.1 是一个bug fix 版,主要是对3.0 中存在的一些问题进 行修 正。文档中没有添加新功能的介绍,但是将之前拼写错误的一些类名进行...

    Java Web程序设计教程

    3.1开发第一个jsp+servlet应用 33 3.1.1创建工程 33 3.1.2编写程序 34 3.1.3部署应用 35 3.2认识jsp 36 3.2.1jsp的工作原理 37 3.2.2jsp注释方式 37 3.2.3jsp声明方式 38 3.2.4jsp表达式的应用 39 3.2.5jsp...

    深入体验Java Web开发内幕

    HTTP协议详解  3.1 了解HTTP<br> 3.2 请求行与状态行  3.3 通用信息头  3.4 请求头  3.5 响应头  3.6 实体头  3.7 扩展头  3.8 思考与实践 第4章 Servlet开发基础  4.1 Servlet...

    JSP高级编程          

    3.2 实体EJB 的开发技术之二——BMP EJB 3.3 EJB 开发实例封装数据源 3.4 本章小结 第4 章 JSP 与J2EE 分布式处理技术 4.1 J2EE 和分布式处理技术 4.2 远程方法调用RMI 技术 4.3 CORBA 技术 4.4 JNDI 技术 4.5 本章...

    JSP高级编程(全)

    3.2 实体EJB 的开发技术之二——BMP EJB 3.3 EJB 开发实例封装数据源 3.4 本章小结 第4 章 JSP 与J2EE 分布式处理技术 4.1 J2EE 和分布式处理技术 4.2 远程方法调用RMI 技术 4.3 CORBA 技术 4.4 JNDI 技术 4.5 本章...

    Spring Security 中文教程.pdf

    7.4. 使用其他过滤器 —— 基于框架 8. 核心安全过滤器 8.1. FilterSecurityInterceptor 8.2. ExceptionTranslationFilter 8.2.1. AuthenticationEntryPoint 8.2.2. AccessDeniedHandler 8.3. ...

    SpringSecurity 3.0.1.RELEASE.CHM

    7.4. 使用其他过滤器 —— 基于框架 8. 核心安全过滤器 8.1. FilterSecurityInterceptor 8.2. ExceptionTranslationFilter 8.2.1. AuthenticationEntryPoint 8.2.2. AccessDeniedHandler 8.3. ...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 上

    3.1、认识XML 3.2、XML解析 3.2.1、DOM解析操作 3.2.2、SAX解析操作 3.2.3、XML解析的好帮手:JDOM 3.2.4、最出色的解析工具:DOM4J 3.3、使用JavaScript操作DOM 3.4、开发实战讲解(基于Oracle数据库) 第4...

    MLDN+李兴华+Java+Web开发实战经典.part3.rar )

    3.1、认识XML 3.2、XML解析 3.2.1、DOM解析操作 3.2.2、SAX解析操作 3.2.3、XML解析的好帮手:JDOM 3.2.4、最出色的解析工具:DOM4J 3.3、使用JavaScript操作DOM 3.4、开发实战讲解(基于Oracle数据库) 第4...

    李兴华 java_web开发实战经典 源码 完整版收集共享

    3.1、认识XML 3.2、XML解析 3.2.1、DOM解析操作 3.2.2、SAX解析操作 3.2.3、XML解析的好帮手:JDOM 3.2.4、最出色的解析工具:DOM4J 3.3、使用JavaScript操作DOM 3.4、开发实战讲解(基于Oracle数据库) 第4...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 下

    3.1、认识XML 3.2、XML解析 3.2.1、DOM解析操作 3.2.2、SAX解析操作 3.2.3、XML解析的好帮手:JDOM 3.2.4、最出色的解析工具:DOM4J 3.3、使用JavaScript操作DOM 3.4、开发实战讲解(基于Oracle数据库) 第4...

    java web 视频、电子书、源码(李兴华老师出版)

    3.1、认识XML 3.2、XML解析 3.2.1、DOM解析操作 3.2.2、SAX解析操作 3.2.3、XML解析的好帮手:JDOM 3.2.4、最出色的解析工具:DOM4J 3.3、使用JavaScript操作DOM 3.4、开发实战讲解(基于Oracle数据库) 第4...

    李兴华Java Web开发实战经典.pdf (高清版) Part1

    3.1、认识XML 3.2、XML解析 3.2.1、DOM解析操作 3.2.2、SAX解析操作 3.2.3、XML解析的好帮手:JDOM 3.2.4、最出色的解析工具:DOM4J 3.3、使用JavaScript操作DOM 3.4、开发实战讲解(基于Oracle数据库) 第4...

    李兴华 Java Web 开发实战经典 高清扫描版Part3

    3.1、认识XML 3.2、XML解析 3.2.1、DOM解析操作 3.2.2、SAX解析操作 3.2.3、XML解析的好帮手:JDOM 3.2.4、最出色的解析工具:DOM4J 3.3、使用JavaScript操作DOM 3.4、开发实战讲解(基于Oracle数据库) 第4...

    李兴华Java Web开发实战经典(高清版) Part2

    3.1、认识XML 3.2、XML解析 3.2.1、DOM解析操作 3.2.2、SAX解析操作 3.2.3、XML解析的好帮手:JDOM 3.2.4、最出色的解析工具:DOM4J 3.3、使用JavaScript操作DOM 3.4、开发实战讲解(基于Oracle数据库) 第4...

    Java开发技术大全 电子版

    3.1面向对象的基本概念98 3.1.1对象98 3.1.2类99 3.1.3消息101 3.1.4面向对象的4个基本特征101 3.2类与对象104 3.2.1类的基本结构104 3.2.2类的声明104 3.2.3创建类体105 3.2.4对象的生命周期106 3.2.5...

Global site tag (gtag.js) - Google Analytics