会话技术全面介绍

Tip:会话


什么是会话?

   会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。我们再举个例子:就类似于打电话,说了一大堆内容,然后挂掉电话。这个过程就类似于一个会话。

会话过程中要解决的一些问题?

   每个用户与服务器进行交互的过程中,各自会有一些数据,程序要想办法保存每个用户的数据。

   例如:用户点击超链接通过一个servlet购买了一个商品,程序应该保存用户购买的商品,以便于用户点结账servlet时,结账servlet可以得到用户商品为用户结账。

   思考:用户购买的商品保存在request或servletContext中行不行?

跟着我继续往下看,有惊喜哦!

某个网站提供了两个超链接(购买和结账),用户打开浏览器,点击购买超链接,请求交给BuyServlet处理,BuyServlet收到请求后,帮用户完成商品的购买。BuyServlet一定要将用户买的商品存起来,以便于用户在点击结账时,PayServlet得到用户购买过的商品,为用户结账。在服务器上如何保存用户购买过的商品呢?之前学javaweb时我们知道每个用户请求服务器都会产生一个request,那我们把用户的数据存在request里面行不行呢?如图所示:

会话技术全面介绍_第1张图片
图1

当用户将买的一台洗衣机的数据存进request里后,点击结账时,会产生一个新的request,就拿不到之前所购买的数据。So,通过request对象将数据带过去肯定不行。(会有疑问,就是在将购买商品存进request里后,用forword技术转发给payServlet,那这web资源共享的就是同一个request,就可以得到用户购买的商品为用户结账,技术上是可以这样做,但这样用户体验性就不好差,因为用户每次一点购买就要结账,不能将购买商品统一好再进行结账)。


会话技术全面介绍_第2张图片
Cookie技术

用户购买商品时,buyServlet(servlet1)会以cookie的技术回写给用户浏览器,由于回写的是一个cookie,那浏览器这时候就会把用户的数据保存起来(在缓存或本地硬盘),用户点payServlet(servlet2)去结账,由于浏览器缓存了用户数据,会带着用户数据找服务器,payServlet知道用户买了什么东西,从而结账。


会话技术全面介绍_第3张图片
session技术

buyServlet(Servlet1)时,先通过request.getSession();创建一个session对象,然后再将数据洗衣机存进session中去,这时就对浏览器A产生一个session,当用户结账时,因为之前已经创建过了session,所以这次只需要取出之前创建的session中的数据。数据不会有冲突,当浏览器B进来时,服务器再次创建session,存数据电视,结账时再将数据取出来,同理,当浏览器C进来时也是如上操作。

不知我这样讲,你会否懂了呢!

你可能感兴趣的:(会话技术全面介绍)