web容器的会话机制
基本所有web应用开发的朋友都很熟悉session会话这个概念,在某个特定时间内,我们说可以在一个会话中存储某些状态,需要的时候又可以把状态取出来,这整个过程的时间空间可以抽象成“会话”这个概念。尽管你对session的使用已经很熟悉了,但你未必真正理解session是什么。因为你只是使用了request.getsession().setAttribute("users", username)把某个值设置到会话中的users变量里面,只是使用了String username = (String)request.getsession().getAttribute("users")获取会话中users变量的值,对于里面具体做了哪些操作、实现机制是如何的可能比较模糊。而这小节将对符合Java规范的web容器的会话机制做一个简单大概的描述。
关于web容器的会话运行机制可以根据上图帮助理解,某个客户端向WebContainer发起请求,http请求报文的cookie头部携带了会话标识jsessionid(假设使用tomcat,会话标识取为jsessionid,其他服务器可能参数名称不叫jsessionid),在我们的WebContainer中,假如已经写好了一个servlet专门用于处理此请求 ,如果要设置某个值到会话中则使用request.getsession().setAttribute(“key”,val),执行此语句具体做了哪些操作呢?首先getsession方法其实就是根据jsessionid从web容器的会话集中查找属于此客户端的会话对象,数据结构如上图的下半部分所示,例如客户端传的值为jsessionid1,则找到对应的会话session1。其次是调用获取到的会话session的setAttribute方法,它其实是往会话中保存数据,session1包含了一个kv结构用于存放数据,所以其实就是把键值放到kv结构中。那么如果要获取会话的值则使用request.getsession().getAttribute(“key”),如果已经搞懂了会话的设置则很好理解,先根据jsessionid获取session对象,再根据key获取session对象里面的kv集对应的值。
另外,客户端是如何把jsessionid传递到服务端的呢?一般会有三种方式,①cookie方式,即通过浏览器读取小文本cookie,读取jsessionid值后附加到http协议的cookie头部,http协议报文传输到服务端后解析cookie头部便可以获取,但如果你把浏览器的cookie给禁止了则这种方式会失效。②重写url方式,即把jsessionid附加到请求的url中,例如http://www.tomcat.com/index.jsp?jsessionid=326257DA6DB76F8D2E38F2C4540D1DEA。③表单隐藏方式,这种方式其实类似重写url方式,我们把jsessionid及其值存放在html表单中,提交时就会一起被提交,服务端只要根据post或get方法分别解析便可获取到。
Web容器的会话机制补充了http协议的无状态性,使web在应用功能方面更加强大,满足了更多更复杂的需求。不管是web应用层开发人员还是中间件开发人员深入理解session机制在软件设计时都会有很大的帮助。
喜欢java的可以交个朋友:
web容器的会话机制的更多相关文章
- web开发(三) 会话机制,Cookie和Session详解
在网上看见一篇不错的文章,写的详细. 以下内容引用那篇博文.转载于<http://www.cnblogs.com/whgk/p/6422391.html>,在此仅供学习参考之用. 一.会话 ...
- Java Web(三) 会话机制,Cookie和Session详解
很大一部分应该知道什么是会话机制,也能说的出几句,我也大概了解一点,但是学了之后几天不用,立马忘的一干二净,原因可能是没能好好理解这两种会话机制,所以会一直遗忘,一直重新回过头来学习它,今天好好把他总 ...
- Java Web(三) 会话机制,Cookie和Session详解(转载)
https://www.cnblogs.com/whgk/p/6422391.html 很大一部分应该知道什么是会话机制,也能说的出几句,我也大概了解一点,但是学了之后几天不用,立马忘的一干二净,原因 ...
- Cookie&Seesion会话 共享数据 工作流程 持久化 Servlet三个作用域 会话机制
Day37 Cookie&Seesion会话 1.1.1 什么是cookie 当用户通过浏览器访问Web服务器时,服务器会给客户端发送一些信息,这些信息都保存在Cookie中.这样,当该浏览器 ...
- 如何设计一个web容器
开发一个web容器涉及很多不同方面不同层面的技术,例如通信层的知识,程序语言层面的知识等等,且一个可用的web容器是一个比较庞大的系统,要说清楚需要很长的篇幅,本文旨在介绍如何设计一个web容器,只探 ...
- 如何设计一个可用的web容器
之前在另外一个平台(http://www.jointforce.com/jfperiodical/article/1035)发表的一篇文章,现在发布到自己的博客上. 开发一个web容器涉及很多不同方面 ...
- [红日安全]Web安全Day12 – 会话安全实战攻防
本文由红日安全成员: ruanruan 编写,如有不当,还望斧正. 大家好,我们是红日安全-Web安全攻防小组.此项目是关于Web安全的系列文章分享,还包含一个HTB靶场供大家练习,我们给这个项目起了 ...
- spring源码:web容器启动(li)
web项目中可以集成spring的ApplicationContext进行bean的管理,这样使用起来bean更加便捷,能够利用到很多spring的特性.我们比较常用的web容器有jetty,tomc ...
- Java Servlet与Web容器之间的关系
自从计算机软件开发进入网络时代,就开始涉及到通讯问题.在客户/服务器(也叫C/S应用)时期,每个软件都有自己的客户端和服务器端软件.并且客户端和服务器端之间的通讯协议差别也很大.后来随着互联网的发展, ...
随机推荐
- MT8127:如何让system分区可读写(MTK安卓6.0)
Android 系统默认情况下,system 分区是只读 mount 的,因为无法进行往里写数据的,可 以用 adb 命令 adb remount 重新 mount 一下. 也可以通过在板子上,输入以 ...
- Android简易实战教程--第三十三话《 AsyncTask异步倒计时》
本篇小案例,完成一个倒计时.方式选择AsyncTask.代码贴在下面: 布局文件soeasy: <LinearLayout xmlns:android="http://schemas. ...
- 详解EBS接口开发之供应商导入(补充)--错误信息处理
check reject details on records of AP_SUPPLIER_INT SELECT s.parent_table,s.reject_lookup_code,S.LAST ...
- 微信小程序之最简单的Demo设计使用
这个小Demo,代码量不多:导航样式.View.Text.点击.JS交互的使用,主要是理解每个后缀文件的功能,然后才能更好的使用开发.......(下面代码和源代码没差别,实在想要的请留言,谢谢... ...
- java.io.FileNotFoundException: ..\lib\commons-el.jar
安装openfire成功后,启动遇到java.io.FileNotFoundException: ..\lib\commons-el.jar错误,并不是缺少了jar包,只需以管理员身份运行即可解决.
- Nginx的负载均衡 - 一致性哈希 (Consistent Hash)
Nginx版本:1.9.1 我的博客:http://blog.csdn.net/zhangskd 算法介绍 当后端是缓存服务器时,经常使用一致性哈希算法来进行负载均衡. 使用一致性哈希的好处在于,增减 ...
- 会声会影小成果分享(那段青春岁月)——校学习部宣传视频制作&生日祝福
大二的时候在校学习部当副部长,没有给干事们带去好的工作经验和管理方法,我净在折腾新媒体方面的东西,很惭愧的说,那时候申请了一个微信的公众号(HGXXB1314),我那时候以为自己很叼,最后是发现自己装 ...
- Django开发自己的博客系统
好久之前就想做一下自己的博客系统了,但是在网上查了查好像是需要会一些Node.js的相关知识,而且还要安装辣么多的库什么的,就不想碰了.但是我遇到了Django这么一款神器,没想到我的博客系统就这么建 ...
- Android源码分析—深入认识AsyncTask内部机制
本文转载http://blog.csdn.net/singwhatiwanna/article/details/17596225该博主博文,谢谢该博主提供的好文章! 前言 什么是AsyncTask,相 ...
- JQuery之动画与特效
显示与隐藏 show(spped,[callback])与hide(spped,[callback]) speed可选填slow.normal.fast,对应的速度分别为600ms.400ms.200 ...