一、构建的商品类

//写一个Goods类,并定义商品的各个属性,返回商品属性的方法,以及商品对象进行比较的方法
//Goods.java

package com.viita.Shop;

public class Goods implements Comparable {

//    初始化各成员变量

private String Id = null;//商品的编号Id

private String name = null;//商品的名称name

private float price = 0.00F;//商品的价格price

private int number = 0;//商品的数量number

public Goods(String Id, String name, float price, int number) {
        this.Id = Id;
        this.name = name;
        this.price = price;
        this.number = number;

}

public String getId() //返回订购商品的编号Id

{
        return this.Id;
    }

public String getName() //返回订购商品的名称name

{
        return this.name;
    }

public float getPrice() //返回订购商品的价格price

{
        return this.price;
    }

public int getNumber() //返回订购商品的数量number

{
        return this.number;
    }

public int compareTo(Object m) {
        // TODO Auto-generated method stub

Goods n = (Goods) m;
        int comRs = Id.compareTo(n.Id);
        return comRs;

}

}

二、购物车

//首先建立Goods(商品)对象goods,并建立建立ArrayList对象ay
//通过ArrayList对象的方法add()将商品对象添加到ArrayList对象ay中
//由于ArrayList对象是具有添加和删除成员的方法,从而实现多个商品存储管理于ArrayList对象
//将ArrayList对象ay存储于session对象当中,实现购物车功能
//shopcar.jsp

<%@ page language="java" import=" java.sql.*,com.viita.Shop.*,java.util.*" pageEncoding="GBK"%>
<%
//设置编码格式

request.setCharacterEncoding("GBK");
//获取参数信息

String id = request.getParameter("id");
String name = request.getParameter("name");
int number = java.lang.Integer.parseInt(request.getParameter("number"));
float price= java.lang.Float.parseFloat(request.getParameter("price"));

//建立商品对象和ArrayList对象

Goods goods = new Goods(id,name,price,number);
ArrayList ay = null;
//如果session中从未写入过,则将建立的商品对象添加到ArrayList对象当中,并写入 session

if((ArrayList)session.getAttribute("car")==null)
{
    ay = new ArrayList();
    ay.add(goods);
    session.setAttribute("car",ay);
    response.sendRedirect("order_index.jsp");
}
//如果写如过,则将商品对象添加到ArrayList对象当中,并写入 session

else
{
ay=(ArrayList)session.getAttribute("car");
    //如果ArrayList 对象为空,则直接添加到ArrayList对象当中

if(ay.isEmpty())
{
        ay.add(goods);
        session.setAttribute("car",ay);
        response.sendRedirect("order_index.jsp");
    }
    //如果ArrayList 对象不为空,则判断购入商品是否已经存在于车中

else
{
        Iterator it = ay.iterator();
        for(int i = 0;i<ay.size();i++) //下面还有另一种遍历方法

{
            Goods shop = (Goods)it.next();
//如果购入商品已经存在,则打印输入提示信息

if(shop.compareTo(goods)==0)
{
            out.println(" ");
            }
//如果购入商品不存在,则直接将商品添加到ArrayList对象当中,并写入 session

else
            {
            ay.add(goods);
            session.setAttribute("car",ay);
            response.sendRedirect("order_index.jsp");
            }
        }
    }
}
%>

三、删除商品

//对购物车中的商品进行删除操作
//removeGoods.jsp

<%@ page language="java" import="java.sql.*,com.viita.Shop.*,java.util.*" pageEncoding="GBK"%>
<%
//设置编码格式

request.setCharacterEncoding("gb2313");
//获取参数信息

String id = request.getParameter("id");
String name = request.getParameter("name");
float price = java.lang.Float.parseFloat(request.getParameter("price"));
int number = java.lang.Integer.parseInt(request.getParameter("number"));
//创建符合条件参数要删除的商品对象

Goods goods = new Goods(id,name,price,number);
//获取session 中存储的ArrayList对象

ArrayList ay = (ArrayList)session.getAttribute("car");
Iterator it = ay.iterator();
//遍历ArrayList对象,并将ArrayList对象中的元素和创建的符合参数条件要删除的商品进行比较

for(int i = ay.size();it.hasNext();i--)
{
    Goods shop = (Goods)it.next();
    
//查询是否有ArrayList对象中的元素与要删除的商品相同

if(shop.compareTo(goods)==0)
{
        int index = ay.indexOf(shop);
        
//如果ArrayList对象已经为空,则跳转

if(ay.isEmpty())
{
            response.sendRedirect("order_index.jsp");
        }
        
//如果ArrayList对象不为空,则从其中移去要与要删除的商品条件相符的元素,并重新写session

else
{
            ay.remove(index);
            session.setAttribute("car",ay);
            response.sendRedirect("order_index.jsp");
        }
    }
    else
{
        out.print("程序异常");
    }
}
%>

[转]用 Jsp 的 Session 机制编写的购物车程序的更多相关文章

  1. 【Tomcat】JSP使用Session、Cookie实现购物车

    购物界面shop.jsp 初始页面 添加商品后,在session中设置属性,重定向回到shop.jsp,然后根据session的内容显示结果 Cookie设置setMaxAge可以延长session的 ...

  2. Session机制详解

    转自:http://justsee.iteye.com/blog/1570652 虽然session机制在web应用程序中被采用已经很长时间了,但是仍然有很多人不清楚session机制的本质,以至不能 ...

  3. cookie,Session机制的本质,跨应用程序的session共享

    目录:一.术语session二.HTTP协议与状态保持三.理解cookie机制四.理解session机制五.理解javax.servlet.http.HttpSession六.HttpSession常 ...

  4. JavaWeb---总结(十九)Session机制

    一.术语session session,中文经常翻译为会话,其本来的含义是指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session.有时候我们可 ...

  5. session 机制和 httpsession 详解 (转载)

    https://www.cnblogs.com/bjanzhuo/archive/2013/02/27/3575884.html 一.术语session 在我的经验里,session这个词被滥用的程度 ...

  6. 理解Cookie和Session机制(转)

    目录[-] Cookie机制 什么是Cookie 记录用户访问次数 Cookie的不可跨域名性 Unicode编码:保存中文 BASE64编码:保存二进制图片 设置Cookie的所有属性 Cookie ...

  7. session机制详解以及session的相关应用

    session是web开发里一个重要的概念,在大多数web应用里session都是被当做现成的东西,拿来就直接用,但是一些复杂的web应用里能拿来用的session已经满足不了实际的需求,当碰到这样的 ...

  8. 理解Cookie和Session机制

    转载: 理解Cookie和Session机制 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录 ...

  9. cookie机制和session机制的原理和区别[转]

    一.cookie机制和session机制的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. 同时我们也看到,由于在服务器端保持状态的 ...

随机推荐

  1. Ubuntu 14.04 64位上安装wps office软件(转http://m.blog.csdn.net/blog/yhc13429826359/24179933)

    废话少说,只给出方法供各位参考!wps for Linux版本已经有两三年没有大的动作,当然其他平台,比如windows,Android,ios上的wps效果还是很赞的说. 下面是我成功安装的步骤: ...

  2. linux的curl用法【转】

    每分钟访问云签到任务执行页面.顺便记录了下curl的用法.以下内容摘自阮一峰博客. 一.查看网页源码 直接在curl命令后加上网址,就可以看到网页源码.我们以网址www.sina.com为例(选择该网 ...

  3. NuGet Package Explorer上传时报:failed to process request:'Method Not Allowed'错误解决办法

    相关日志:PUT /api/v2/package - 1000 -  NuGet+Package+Explorer/3.15.0.0+(Microsoft+Windows+NT+6.2.9200.0) ...

  4. linux下设置opencv环境变量

    一.安装opencv(这里不再讲述) 二.添加库路径(创建opencv.conf文件) 输入命令:vi /etc/ld.so.conf.d/opencv.conf 输入/usr/local/lib,并 ...

  5. scala学习5--函数二

    to  def test() : Unit = { // for(i <- 1.to(100)){ // println(i) // } for(i <- 1 to 100 ){ prin ...

  6. AC日记——Cards Sorting codeforces 830B

    Cards Sorting 思路: 线段树: 代码: #include <cstdio> #include <cstring> #include <iostream> ...

  7. [实战]MVC5+EF6+MySql企业网盘实战(7)——文件上传

    写在前面 周末了,在家继续折腾网盘,今天实现网盘文件的上传. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网盘实战(1) [实战] ...

  8. 前端JS框架系列之requireJS基础学习

    1 背景 伴随着项目功能的不断扩充,客户体验的不断完善,实现交互逻辑的JS代码变得越来越多.起初,为了管理JS代码,我们把JS从页面中解放出来独立成文件,接着又把相似的交互代码提取到公共的JS页面中. ...

  9. Jenkins配置agent

    一. 通信协议 为了master和agent能够正常通信,连接的建立必须是双向的. SSH: master通过标准的SSH协议连接slave. Java Web Start: Java 应用在agen ...

  10. JQuery插件ajaxFileUpload 异步上传文件(PHP版)

    太久没写博客了,真的是太忙了.善于总结,进步才会更快啊.不多说,直接进入主题. 前几天想在手机端做个异步上传图片的功能,平时用的比较多的JQuery图片上传插件是Uploadify这个插件,效果很不错 ...