JavaWeb Servlet- HttpSession接口 共享数据流程原理

介绍:

  1. 来自于Servlet规范中接口。其实现类由Http服务器提供,tomcat提供的实现类在于servlet-api-jar 。
  2. 如果两个Servlet为同一个用户/同一个浏览器提供服务。此时这两个Servlet可以使用当前用户的HttpSession对象进行数据共享
  3. 开发人员习惯于将HttpSession对象称为【会话作用域对象

http服务器如何将用户与HttpSession关联起来?

                通过cookie

Cookie与HttpSession区别?【面试】

  1. 存放位置不同

                Cookie 存储在客户端计算机的内存中或则硬盘

                HttpSession存储在服务端计算机的内存

     2.存储数据量不同

                一个Cookie对象只能存放一个共享数据

                HttpSession对象可以存放任意数量的共享数据

     3.存储数据类型不同

                Cookie对象由于存放客户端计算机,保存共享数据只能是String

                HttpSession对象存放服务端计算机,保存任意类型共享数据Object

      4.参照物不同

                    Cookie----------------->用户在服务端得到一个 会员卡

                   HttpSession------------>用户在服务端得到一个 私人保险柜

HttpSession的工作原理

 用户通过浏览器第一次访问OneServlet。

OneServlet在提供服务过程中要求,

Tomcat为当前用户开发一个【私人储物柜(HttpSession对象)】.Tomcat在创建这个HttpSessio对象时,生成一个唯一编号.这个编号称为session Id。

OneServlet工作完毕后。Tomcat将session Id作为一个Cookie对象 ('JSESSIONID',柜子编号)写入到响应头

然后浏览器在接收到响应包之后,将这个cookie保存在浏览器的内存中等到用户第二次来访问这个网站时,自动发送这个cookie对象此时提供服务的TwoServlet 就可以凭借柜子编号得到用户的私人储物柜并读取由OneServlet写入的共享数据

 

命令实现:

         1.向Tomcat索要当前用户的私人储物柜

                  HttpSession session = 请求对象.getSession();

                  HttpSession session = 请求对象.getSession(false);

         2.将数据存入到当前用户的私人储物柜作为共享数据

                  session.setAttribute("共享数据名",共享数据Object);

        3.将数据从当前用户的私人储物柜读取出来

                      Object 共享数据 =  session.getAttribute("共享数据名")

getSession() 与 getSession(false)区别?【面试】

1.getSession()

        如果当前用户在服务端已经拥有了私人储物柜。此时直接将这个柜子返回Tomcat

       如果当前用户在服务端尚未拥有私人储物柜要求Tomcat,为当前用户创建一个新的私人储物柜返回。

2.getSession(false)

     如果当前用户在服务端已经拥有了私人储物柜。此时直接将这个柜子返回Tomcat,

    如果当前用户在服务端尚未拥有私人储物柜 此时要求Tomcat返回null

       

 生命周期

  1. 用户第一次向Tomcat索要会话作用域对象时,由Tomcat负责生成
  2. 由于JSESSIONID只能存放在浏览器缓存中,所以在浏览器关闭时用户与自己的HttpSession对象失去联系
  3. 如果HttpSession对象空闲时间达到【最大空闲时间】,此时Tomcat认为当前用户放弃了自己的HttpSession,此时进行销毁处理。

 

HttpSession销毁方式

Tomcat在创建HttpSession对象时,自动设置一个【最大空闲时间】.如果这个HttpSession对象从上次使用完毕到现在空闲的时间达到【最大空闲时间】,上限,此时Tomcat负责将这个HttpSesion对象进行销毁。Tomcat默认设置最大空闲时间是30分钟。

最大空闲时间手动设置

30分钟等待时间,并不是所有的服务端计算机都能承受的。因此Tomcat允许开发人员自行设计较少的空闲时间。代码如下web.xml下

 <session-config>

<session-timeout>5</session-timeout><!--sesison过期时间以分钟为单位-->

 </session-config>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值