Session

Session(会话机制),会话机制其实就是一个信息共享域,可以保留客户端每次发送请求的信息

Session和Attribute

  • 由于Http协议是无状态的,只会保留当前请求,也就是再获取请求2的时候,请求1就会丢失,这也就是用attribute属性
  • 所以有了Session机制,所以客户端每次发送请求,都会存在一个Session里面,类似与键值对
  • 客户端是根据每个Session各自的ID找到相应的属性
  • Session每个客户端只有一个,但可以有很多键值对
  • 在jsp里面,Session会自动创建,然而Sevlet却不会

Session常用方法

HttpSession session=request.getSession(false);
HttpSession session=request.getSession();
System.out.println("创建时间:"+session.getCreationTime());
System.out.println("ID:"+session.getId());
System.out.println("是否是新的Session:"+session.isNew());
System.out.println("上次使用时间:"+session.getLastAccessedTime());
//session.invalidate();
System.out.println("判断是否被销毁:"+session==null);
  • getSession(false),是不会自动创建,也就是如果之前没有session就不会返回,然而getSession()就是会自动创建
  • invalidate()销毁session
  • 同一个Session的ID和创建时间都不变
  • Session的默认存活时间是30分钟,可以自己设置时间

Session如何找寻

  • 每次Session创建都会自动生成ID
  • ID随着response发送给客户端
  • 客户端根据获取的ID,然后访问服务器的Session,所以请求不会过期

Session小Demo,购物车实现


这是一个简单的实现原理流程图,下面就更具这个上代码

Login

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.sendRedirect("Goods");}

由于只是演示购物车机制,所以前面的登录之类的并没有去实现,前面博客有介绍

Goods

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {List<Car> list=new ArrayList<>();Car car1=new Car(1,"帅帅哒",30+"");Car car2=new Car(2,"美",20+"");Car car3=new Car(3,"美美哒",10+"");Car car4=new Car(4,"帅",40+"");list.add(car1);list.add(car2);list.add(car3);list.add(car4);request.setAttribute("list", list);request.getRequestDispatcher("goods.jsp").forward(request, response);}

同样这里仅仅只是演示,没有连接数据库,前面博客都有相关步骤的讲解

shoppingCar

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {int id=Integer.parseInt(request.getParameter("id"));String name=request.getParameter("name");String price=request.getParameter("price");Car car=new Car(id,name,price);HttpSession session=request.getSession();List<Car> list=(List<Car>) session.getAttribute("car");if(list==null)list=new ArrayList<Car>();list.add(car);session.setAttribute("car", list);response.sendRedirect("shoppingCar.jsp");}
  • 这里的步骤如下
  • 首先获取到需要操作的商品类,并且实例一个对象
  • 先从session中取出之前保留的购物车,然后判断
  • 如果第一次操作,因为没有商品,所以需要重新创建
  • 然后购物车再添加本次操作的对象
  • 然后吧新的列表添加进去
  • 如果用数据库会更方便,直接从数据库中的表查询即可

Jsp页面

<!-- goods.jsp--><body><table><tr><td>ID</td><td>名字</td><td>价格</td><td>操作</td></tr><% List<Car> list=(List)request.getAttribute("list");for(Car car:list){%><tr><td><%=car.getId() %></td><td><%=car.getName() %></td><td><%=car.getPrice() %></td><td><a href="ShoppingCar?id=<%=car.getId() %>&name=<%= URLEncoder.encode( car.getName() ,"utf-8")%>&price=<%=car.getPrice() %>">购买</a></td></tr><%} %></table>
</body><!--shoppingcar.jsp-->
<a href="Login">返回</a>
<table><tr><td>ID</td><td>名字</td><td>价格</td><td>数量</td></tr><% List<Car> list=(List)session.getAttribute("car");for(Car car:list){%><tr><td><%=car.getId() %></td><td><%=car.getName() %></td><td><%=car.getPrice() %></td><td>1</td></tr><%} %></table>
</body>

总结

  • 结合本篇博客以及前几篇博客,相信大家写一个带登录注册以及列表管理和添加购物车的后台信息还是没问题的
  • 源码链接

浅谈Session并且实现购物车相关推荐

  1. 浅谈Session与Cookie的关系

    阅读目录 一.概念理解: 首先cookie是服务端识别客户的唯一标识的依据,客户在访问网站时候,服务端为了记住这个客户,会在服务端按照它的规则制作一个cookie数据,会将这个cookie数据保留在服 ...

  2. 浅谈session,cookie,sessionStorage,localStorage的区别及应用场景

    浏览器的缓存机制提供了可以将用户数据存储在客户端上的方式,可以利用cookie,session等跟服务端进行数据交互. 一.cookie和session cookie和session都是用来跟踪浏览器 ...

  3. 转载:浅谈Session与Cookie的区别与联系

    版权声明:本文为CSDN博主「dwl假行僧」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/duan107 ...

  4. 浅谈session实现原理(阿里面试题)

    最近博主刚刚经历了阿里的技术一面,面试官上来就问了我很多有关网络协议的东东,以前看报文的时候,总有一个cookic在浏览器中.例如php为服务器脚本语言的,会有这样一个名为PHPSESSID的cook ...

  5. 浅谈session的domain 域名作用域

    前段时间不小心从svn拉下代码时更新了自己的config配置 导致session配置中多加了domain参数 倒是我本地后台一直登陆不上 令牌验证无效 之后把domain去掉就好了 因为线上的和我本地 ...

  6. 浅谈IM软件业务知识—会话session的概念,附一张IM软件的层次图

    ----------------------------------------------------欢迎查看IM软件业务知识<专栏>-------------------------- ...

  7. 浅谈软件自动化集成测试的流程

    浅谈自动化集成测试 相信从事软件测试专业的同行很早就知道了自动化的测试技术,也许大家也很想知道具体的软件自动化具体的运行实施过程.本人学识尚欠,目前无法对综合的软件自动化的测试进行阐述,但是本人通过不 ...

  8. 浅谈ASP.NET的内部机制(一)

    浅谈ASP.NET的内部机制(一) 前言:当一个Http请求发送给一个aspx页面时,服务器进行了哪些操作?又如何来解析这个请求?ASP.NET在接收请求后是怎么运行的,如怎么编译以及怎么样用托管的代 ...

  9. 浅谈Python Web的五大框架

    说到web framework,Ruby的世界Rails一统江湖,而Python则是一个百花齐放的世界,各种micro-framework.framework不可胜数,不完全列表见:http://wi ...

最新文章

  1. 多模态商品推荐与认知智能背后的数学
  2. Java RMI详解
  3. [WinAPI] API 11 [创建目录]
  4. 实时动态测量技术的不足与改进方法
  5. python实时得到cpu和内存的使用情况
  6. 容器set和multiset
  7. PHP二维数组去重(指定键名)
  8. Service生命周期
  9. 套接字编程--1(UDP协议编程,端口号,传输层协议,网络字节序)
  10. 支付宝后台如何查看自己的签约详情
  11. netty java开发文档_Netty简明教学文档
  12. Excel表哥表姐如何突破职业天花板?我有两个忠告
  13. hql查询之实体对象查询
  14. matlab软件及基础实验第8单元,知到高等数学与MATLAB启蒙第八单元章节测试答案...
  15. java中json数组如何转为对象
  16. ITU-R BT601/BT709 BT656/BT1120区别与联系
  17. TensorFlow cifar 卷积网络
  18. 2020年最新PHP面试题汇总(附答案)
  19. 我还年轻——献给37岁的自己
  20. php7 字符串转数字,strtoupper()

热门文章

  1. PADS打开PCB文件时出现提示:发生严重的运行时错误。
  2. 《Web安全之机器学习入门》一 3.2 数据集
  3. 利用PHPExcel将数据导出到xls格式的excel文件
  4. 3章等价类划分法-城市号码
  5. matlab双纵轴刻度覆盖问题,求助: matlab双纵轴换图问题
  6. Binet-Cauchy公式
  7. 【软件测试】如何梳理你测试的业务
  8. CNN的Python实现——第四章:卷积神经网络的结构
  9. Nginx下同域部署多个Vue项目(history路由模式),报404、500错误
  10. 9. JVM-方法区