使用session技术来实现网上商城购物车的功能

首先、简单的了解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);
    }

}

最终效果如下:

时间: 2024-08-02 02:50:59

使用session技术来实现网上商城购物车的功能的相关文章

【JAVAWEB学习笔记】网上商城实战5:后台的功能模块

今日任务 完成后台的功能模块 1.1      网上商城的后台功能的实现: 1.1.1    后台的功能的需求: 1.1.1.1  分类管理: [查询所有分类] * 在左侧菜单页面中点击分类管理: * 提交到Servlet: * 查询所有的分类: * 显示到页面中: [添加分类] * 在分类列表页面中点击[添加]按钮. * 提交到Servlet跳转到添加页面. * 输入信息点击[确定]按钮. * 提交到Servlet完成保存分类的功能. [修改分类] * 在分类列表页面中点击[编辑]链接: *

【SSH网上商城项目实战25】使用java email给用户发送邮件

当用户购买完商品后,我们应该向用户发送一封邮件,告诉他订单已生成之类的信息,邮箱地址是从用户的基本信息中获取,好了,首先我们来看一下Java中发送邮件的方法. 1. java中发送email的方法     在完善这个项目之前,先来回顾一下java中是如何发送邮件的,首先肯定需要发送邮件的jar包:mail.jar,导入到lib目录下,好了,下面我们先写一个普通的java程序来回顾一下java email的知识点: public class SendEmailDemo { public stati

让您正确选择网上商城开发公司——勇闯科技

电子商务已经成为我们这个时代最重要和最成功的互联网应用之一,越来越多的人都在通过网上商城来购买商品.在北京的大街上,每天都可以看到骑着电动自行车带着大箱小包的快递人员:在各个网上商城上闲逛,已成为了某些网虫的"强迫症".搭建一个功能强大的网上商城,成为各行各业开发电子商务的迫切需要.    互联网的发展真的很是惊人,现在越来越多的人开始在网上进行购物,不用出门就可以买到自己喜欢的东西,确实挺爽的,有越来越多的企业或个人开始了网上商城的开发,但由于企业或个人对商城这块不是特别了解,所以在

会话之session技术(第七次课)

什么是Session 使用Cookie和附加URL参数都可以将上一次请求的状态信息传递到下一次请求中,但是如果传递的状态信息较多,将极大降低网络传输效率和增大服务器端程序处理的难度. Session技术是一种将会话状态保存在服务器端的技术 ,它可以比喻成是医院发放给病人的病历卡和医院为每个病人保留的病历档案的结合方式 . 客户端需要接收.记忆和回送 Session的会话标识号,Session可以且通常是借助Cookie来传递会话标识号. 同一用户的不同页面共享数据(Session) Sessio

BrnShop开源网上商城第一讲:架构设计

首先在此感谢大家对BrnShop项目的支持和鼓励!我们在发布BrnShop以前曾推测项目会受到不少园友的支持,但没想到园友们的支持大大超过我们的预测.4天6000次浏览,140个推荐,170个评论,8000次下载.看到这些数据后我们内心除了激动外,更多了一份责任.无论将来遇到多大的困难,我们一定要坚持把BrnShop坚持到底!! 如果你还不知道BrnShop是什么或还没有下载源码的可以点此下载,如果下载源码后发现商城有bug,也可以点此下载(什么?你还是1.0.**版本?我们现在都已经更新到1.

SSH网上商城---商品详情页的制作

在前面的博文中,小编分别简单的介绍了邮件的发送以及邮件的激活,逛淘宝的小伙伴都有这样的体会,比如在搜索框中输入连衣裙这个商品的时候,会出现多种多样各种款式的连衣裙,连衣裙的信息包括价格,多少人购买,商品的名称等等,但是这些信息不够详情,我们需要了解更多的关于连衣裙的详情,点击某个商品,跳转页面,查看连衣裙的详情,以前小编逛淘宝的时候,从来都没有想过这个功能是如何实现,只知道一个劲儿的在那儿逛,小编现在接手的这个项目中就遇到这样的功能,点击商品跳转到某个商品的详情页面,这个功能该如何实现呢?不要着

【SSH网上商城项目实战16】Hibernate的二级缓存处理首页的热门显示

网上商城首页都有热门商品,那么这些商品的点击率是很高的,当用户点击某个热门商品后需要进入商品的详细信息页面,就像淘宝里面那样.那么每次点击都要去后台查询一下该商品的详细信息,就会发送相应的sql语句,每次刷新一下详细页面也会发sql语句,这样的话,性能肯定会受到很大的影响.那么使用Hibernate的二级缓存就可以解决这个问题. 有些人可能会想,我们可以使用重定向,这样的话,在用户第一次访问的时候把信息查出来放到session中,以后每次用户刷新就可以去session中拿了,这样就不用去数据库中

SSH网上商城环境配置—浅析Hibernate

SSH网上商城虽然只有四天的视频,day01-04,不过边做项目边学习,还真是不容易,到现在为止已经进行了半个月了,才完成了两天的内容.其中光一个环境配置就花了十天左右的时间,包括配置文件添加.Jar包的添加等等.敲代码时再加上对开发环境的陌生,着实费了不少劲,调试也花费了好长时间,不过还好,现在已经熟悉一点了,做起来也顺手一些了,下面就简单汇总一下这里面用到的技术. SSH是集成框架,它是从三层的基础上发展而来的.三层中包括页面显示层.业务逻辑层.数据库操作层,SSH中同样也是,只不过每个层使

【SSH网上商城项目实战20】在线支付平台的介绍

之前已经完成了首页的显示,用户添加购物车,确认订单等功能,下面就是支付功能的开发了.用户确认了订单后会直接跳转到支付页面进行在线支付,在线支付需要第三方的接口,这一节主要介绍一些关于第三方支付的内容,从下一节开始,我们真正开发在线支付模块. 1. 在线支付介绍 在线支付是指卖方与买方通过因特网上的电子商务网站进行交易时,银行为其提供网上资金结算服务的一种业务.它为企业和个人提供了一个安全.快捷.方便的电子商务应用环境和网上资金结算工具.在线支付不仅帮助企业实现了销售款项的快速归集,缩短收款周期,