会话技术
用户使用Web应用的过程实际是调用了一系列的Servlet来组合处理请求,从而完成整个业务流。不同Servlet组合起来为用户服务的时候就会遇到一个数据共享和传输的问题,如何让多个Servlets能识别用户?能否用request或者是context来保存attributes从而传递属性?
- 用request.getRequestDispacther(url).forward(request,response), 要求servlets业务流连续不能断裂,即用户一购物就立即结账
- 用context 保存attributes会有线程问题,多个用户使用同一个servlet处理请求会造成数据问题
为了解决不同Servlet数据共享的问题产生了会话技术,JavaWeb有两种会话技术:cookie和session,这两种技术的核心区别是cookie把客户信息存储在客户浏览器上,session把客户信息存粗在服务器上:
- Cookie,WebServer将生成的客户数据存储在浏览器端,浏览器在发送请求时将cookie信息加入http header发送给Server,Server根据不同的cookie进行不同的处理。
- Session,WebServer为每个客户的浏览器建立一个独享的session对象存储客户数据,并且将sessionid回送给客户端浏览器,客户在发起请求时带着session,Server根据sessionid进行不同的处理。
- 淘宝和博客园用的都是cookie,cookie把数据都存在浏览器端,对服务器磁盘的压力小,但是每次请求要携带大量的数据,对网络带宽的要求高。
Cookie交互流程
程序实现技术点
- Browser最多存30个Cookie,每次浏览记录应该更新Cookie,而不是新增Cookie
- 浏览历史应该存最近浏览的Cookie
首页Servlet
- 显示商品列表
- 显示浏览历史
查看详情Servlet
- 显示商品详情
- 更新Cookie并且回写Cookie信息给浏览器