使用session技术来实现网上商城购物车的功能
技术 实现 功能 session 购物车 使用
2023-09-14 09:07:42 时间
首先、简单的了解session和cookie的区别:
一、session和cookie的区别:
session是把用户的首写到用户独占的session中(服务器端)
cookie是把用户的数据写给用户的浏览器。
session对象由服务器创建,开发人员可以调用request对象的getsession方法得到session对象。
首先写页面代码,仍然借助于商品浏览记录来写:
1、jsp购买页面代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@page import="java.util.*"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>购物页面</title> </head> <body> <h1>商品列表</h1> <ul > <li><a href="/myday07/addcookie?id=1">java基础</a><a href="/myday07/buysession?id=1">购买</a></li> <li><a href="/myday07/addcookie?id=2">javaweb</a><a href="/myday07/buysession?id=2">购买</a></li> <li><a href="/myday07/addcookie?id=3">DHTML</a><a href="/myday07/buysession?id=3">购买</a></li> <li><a href="/myday07/addcookie?id=4">数据库</a><a href="/myday07/buysession?id=4">购买</a></li> <li><a href="/myday07/addcookie?id=5">Struts</a><a href="/myday07/buysession?id=5">购买</a></li> <li><a href="/myday07/addcookie?id=6">Spring</a><a href="/myday07/buysession?id=6">购买</a></li> <li><a href="/myday07/addcookie?id=7">Hibernate</a><a href="/myday07/buysession?id=7">购买</a></li> </ul> <h1>最近访问记录</h1><h5><a href="/myday07/clearcookie">清空数据</a> </h5> <% String[] arr = {"java基础","javaweb","DHTML","数据库","Struts","Spring","Hibernate"}; // 获得所有cookie Cookie[] cookies = request.getCookies(); // 在cookie中查找商品浏览记录 String visitlist = null; if(cookies!=null){ for (Cookie cookie : cookies) { if (cookie.getName().equals("visitlist")) { visitlist = cookie.getValue(); break; } } if(visitlist==null){ // 商品列表不存在 out.println("无"); }else{ String[] existIds = visitlist.split(","); for(String existId:existIds){ int id = Integer.parseInt(existId); out.println(arr[id-1]+"<br/>"); } } } %> <hr> <h1>购物车列表</h1> <% //1.获得购物车列表 Map<String, Integer> cart=(Map<String, Integer>)session.getAttribute("cart"); //2.遍历map输出 if(cart!=null){ Set<String> keys=cart.keySet(); for(String id:keys) { int number=cart.get(id);//每件商品的数量 int idInt=Integer.parseInt(id); String productName=arr[idInt-1]; out.println("商品名称:"+productName+",商品数量:"+number+"<br/>"); } } %> <hr/> </body> </html>
2、编写商品浏览记录的servlet页面
package cn.itcast.cookie; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class addCookie extends HttpServlet { // 获得用户当前访问商品,更新到商品浏览记录列表 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 自动刷新 response.setHeader("refresh", "2;url=/myday07/products1.jsp"); // 1、获得当前用户浏览商品id String id = request.getParameter("id"); // 2、获得用户浏览记录列表 Cookie[] cookies = request.getCookies(); // 查找访问记录列表 name:visitlist ----- 1,3,5,6 String visitlist = null; if (cookies != null) { // 存在cookie for (Cookie cookie : cookies) { if (cookie.getName().equals("visitlist")) { visitlist = cookie.getValue(); break; } } if (visitlist == null) { // 列表不存在,当前商品第一件商品 Cookie cookie = new Cookie("visitlist", id); cookie.setMaxAge(60 * 60); response.addCookie(cookie); response.getWriter().println("add success"); } else { // 3、判断当前商品是否已经在列表中 String[] existIds = visitlist.split(","); for (String exsitId : existIds) { if (exsitId.equals(id)) { // id存在在列表中 response.getWriter().println("add success"); return; } } // 4、如果当前商品不在列表中,添加到列表 Cookie cookie = new Cookie("visitlist", visitlist + "," + id); cookie.setMaxAge(60 * 60); response.addCookie(cookie); response.getWriter().println("add success"); } } else { // 表示 并没有该站点的任何cookie Cookie cookie = new Cookie("visitlist", id); cookie.setMaxAge(60 * 60); response.addCookie(cookie); response.getWriter().println("add success"); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
3、编写清除缓存的cookie页面
package cn.itcast.cookie; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class clearCookie extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Cookie cookie=new Cookie("visitlist",""); cookie.setMaxAge(0); response.addCookie(cookie); response.sendRedirect("/myday07/products1.jsp"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
4、编写商品购买页面
package cn.itcast.cookie; import java.io.IOException; import java.util.HashMap; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class BuySession extends HttpServlet { //添加商品到购物车 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1.获得商品的id String id=request.getParameter("id"); //2.获得购物车cart--从session得到 HttpSession session=request.getSession(); Map<String, Integer> cart=(Map<String, Integer>)session.getAttribute("cart");//如果session中没有购物车呢 if(cart==null) {//原来的session中并不存在购物车 cart=new HashMap<String, Integer>(); } //3.判断商品是否存在购物车中 if(cart.containsKey(id)) { //4.存在数量+1 int number=cart.get(id); cart.put(id, number+1); }else{ //5.不存在 将商品存入购物车 数量1 cart.put(id, 1); } session.setAttribute("cart", cart); response.sendRedirect("/myday07/products1.jsp");//重定向回去 } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
最终效果如下:
相关文章
- 技术分享 | MySQL 审计功能实现方案
- 联想笔记本如何开启VT虚拟化技术?_联想拯救者怎么进入bios
- 技术汇总:第六章:分布式自增长ID
- PaddleNLP通用信息抽取技术UIE【一】产业应用实例:信息抽取{实体关系抽取、中文分词、精准实体标。情感分析等}、文本纠错、问答系统、闲聊机器人、定制训练
- 登云之路|腾讯大规模云原生技术实践案例图鉴
- 基于激光传感的焊接机器人焊缝寻位跟踪技术
- 合合信息新推出反光消除技术,助力手写文字识别更精准
- DWR Server Push(服务器推技术) 实现即时聊天功能(WEB)`详解编程语言
- PHP Redis 集群部署及其实现技术(phpredis集群)
- Linux掌握路由技术,实现网络连接(linux如何路由)
- 掌握Linux架构,成就技术工程师之路(linux架构工程师)
- Linux下KVM虚拟化技术实现(linuxkvm)
- 【MySQL实现报表功能的突破性技术】(mysql报表)
- Mysql与SQL:两个不同的数据库技术(mysql与sql的区别)
- 实现Redis负载均衡:技术指南(redis的负载均衡)
- 外键约束:Oracle数据库实现技术(外键oracle)
- 接SQL Server左外连接技术:实现多表数据查询功能(sqlserver左外连)
- SQL Server无锁技术:实现数据安全高效率(sqlserver不加锁)
- MSSQL自定义主键技术实现(mssql自定义主键)
- Oracle全联接技术实现企业数据资产协作(oracle 全联接)
- 及方法Oracle数据库插入技术及其实现方法研究(oracle 几种插入)
- 深入理解持久层配置Redis缓存技术(持久层配置redis缓存)
- 实现快速响应基于Redis的分页技术(基于redis的分页功能)
- Oracle从库数据抽取技术实战(oracle 从库抽取)
- Redis实现的键值映射技术(redis键值映射的实现)
- Redis实现数据跟踪功能技术剖析(Redis跟踪)
- 处理 Redis 超时异常的技术指南(redis 超时异常处理)
- 苹果或引入Ripple技术,以支持Apple Pay发展
- 百家厂商的「技术觉醒」:隐私计算,将是下一个「Intel Inside」