用 Jsp 的 Session 机制编写的购物车程序.txt
### 使用JSP的Session机制编写的购物车程序详解 #### 一、背景介绍 在现代Web应用开发中,用户状态管理是一项重要的功能。对于需要跟踪用户活动或存储用户特定信息的应用来说,`Session`机制提供了非常实用的支持。本文将详细介绍一个使用Java Server Pages (JSP) 和 `Session` 机制实现的购物车程序。 #### 二、关键概念解释 1. **Session**: 在Web应用中,`Session`是服务器用来存储与某个用户会话相关的数据的一种方式。这些数据可以是用户的登录状态、购物车中的商品等。 2. **JSP**: Java Server Pages是一种基于Java技术的服务器端脚本语言,用于创建动态网页。它可以嵌入HTML页面中,并利用Java的强大功能来处理服务器端的业务逻辑。 3. **商品类 (`Goods`)**: 用于表示商品信息的Java类,包括商品ID、名称、价格和数量等属性。 #### 三、核心代码解析 ##### 商品类(`Goods.java`) ```java package com.viita.Shop; public class Goods implements Comparable<Goods> { // 成员变量 private String id = null; // 商品ID private String name = null; // 商品名称 private float price = 0.00F; // 商品价格 private int number = 0; // 商品数量 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() { return this.id; } public String getName() { return this.name; } public float getPrice() { return this.price; } public int getNumber() { return this.number; } @Override public int compareTo(Goods other) { return this.id.compareTo(other.id); } } ``` - **商品类实现**:该类实现了`Comparable`接口,通过重写`compareTo`方法实现了商品对象之间的比较,主要依据商品ID进行排序。 - **成员变量**:定义了商品的基本属性如ID、名称、价格和数量。 - **构造函数**:用于初始化商品实例。 - **getter方法**:提供了获取各个属性值的方法。 ##### 购物车操作(`shopcar.jsp`) ```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 = Integer.parseInt(request.getParameter("number")); float price = Float.parseFloat(request.getParameter("price")); // 创建商品实例 Goods goods = new Goods(id, name, price, number); ArrayList<Goods> cart = null; // 检查Session是否存在购物车 if (session.getAttribute("car") == null) { cart = new ArrayList<>(); cart.add(goods); session.setAttribute("car", cart); response.sendRedirect("order_index.jsp"); } else { cart = (ArrayList<Goods>) session.getAttribute("car"); if (cart.isEmpty()) { cart.add(goods); session.setAttribute("car", cart); response.sendRedirect("order_index.jsp"); } else { Iterator<Goods> it = cart.iterator(); boolean exists = false; while (it.hasNext()) { Goods existing = it.next(); if (existing.compareTo(goods) == 0) { exists = true; break; } } if (!exists) { cart.add(goods); session.setAttribute("car", cart); response.sendRedirect("order_index.jsp"); } else { out.println("alert('商品已存在!');"); out.println("window.close();"); } } } %> ``` - **设置字符编码**:确保请求参数能够正确解析。 - **获取商品信息**:从请求中获取商品ID、名称、数量和价格。 - **创建商品实例**:根据获取的信息创建`Goods`对象。 - **检查Session**:判断Session中是否已经存在购物车列表。 - 如果不存在,则创建新的购物车列表,并添加商品到其中。 - 如果已存在,则进一步检查: - 购物车为空,直接添加新商品。 - 购物车不为空,遍历购物车中的商品,判断新商品是否已存在于购物车中。 - 如果已存在,则给出提示信息。 - 如果不存在,则添加到购物车列表。 #### 四、总结 本程序通过使用`Session`机制和自定义的`Goods`类,实现了基本的购物车功能。用户可以在不同页面之间保持购物车的状态,这在实际应用中是非常有用的。此外,通过实现`Comparable`接口,还可以对购物车中的商品进行排序,提高用户体验。这种实现方式简单明了,适合初学者学习和理解。
一、构建的商品类
[color=red]
//写一个Goods类,并定义商品的各个属性,返回商品属性的方法,以及商品对象进行比较的方法
//Goods.java
[/color]
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
{
}
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;
}
}
二、购物车
[color=red]
//首先建立Goods(商品)对象goods,并建立建立ArrayList对象ay
//通过ArrayList对象的方法add()将商品对象添加到ArrayList对象ay中
//由于ArrayList对象是具有添加和删除成员的方法,从而实现多个商品存储管理于ArrayList对象
//将ArrayList对象ay存储于session对象当中,实现购物车功能
//shopcar.jsp
[/color]
%@ 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"));
剩余5页未读,继续阅读
- 粉丝: 6
- 资源: 31
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助