日期:2014-05-17  浏览次数:20728 次

【高分】jsp 用session 实现购物车功能,不用数据库
使用session对象及其他JSP内置对象实现简单的网上购书系统(不用数据库),至少包括图书的网上购买(添加至购物车,设置选购本数),从购物车删除以及结账等功能,功能尽量与网上购书类似。
应该怎么实现,刚学jsp没有思路

------解决方案--------------------
不用数据库是对问题的简化而不是加难度。
在application域中放所有书的清单,
在session域中放本次购书的记录清单(也就是所谓的购物车),
...
其他不多说了,很多书上都有完整例程的。

CRUD就是数据的增查改删,虽然不必在数据库上做了,但还是需要在存书清单上做的。
------解决方案--------------------

购物车通常都是对本机浏览器的cookie进行读写操作,session是不可取的,特别是服务器负载量比较大的时候。购买确认之后才进行入库操作。


所谓curd就是,creat,update,read,delete,取每个单词首字母的缩写。
------解决方案--------------------
用hashtable,做键值对,或者直接做成泛型对象,放在session里就行了,不过我也同样建议用cookie(注意cookie数量、大小限制)
------解决方案--------------------
HTML code

beans包中有bookelement,chStr.
package beans;

public class bookelement {
public String ISBN;
  public float price;
  public int number;

  public bookelement()
  {
  }

}

package beans;

public class chStr {
public chStr()
{
}

public String chStr(String str)
{
if(str == null)
{
str = "";
} else
{
try
{
str = (new String(str.getBytes("iso-8859-1"), "GB2312")).trim();
}
catch(Exception e)
{
e.printStackTrace(System.err);
}
}
return str;
}

public String convertStr(String str1)
{
if(str1 == null)
{
str1 = "";
} else
{
try
{
str1 = str1.replaceAll(" ", " ");
str1 = str1.replaceAll("\r\n", "<br>");
}
catch(Exception e)
{
e.printStackTrace(System.err);
}
}
return str1;
}

}

<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<%@ page import="java.util.Vector"%>
<%@ page import="beans.bookelement"%>
<jsp:useBean id="connDB" scope="page" class="beans.connDB"/>
<jsp:useBean id="chStr" scope="page" class="beans.chStr"/>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>添加购物车</title>
</head>

<body>
<%
String ISBN=chStr.chStr(request.getParameter("ISBN"));
String sql="select * from tb_bookinfo where ISBN='"+ISBN+"'";
ResultSet rs=connDB.executeQuery(sql);
float price=0;
if(rs.next()){
price=rs.getInt("price");
}
bookelement mybookelement=new bookelement();
mybookelement.ISBN=ISBN;
mybookelement.price=price;
mybookelement.number=1;
boolean Flag=true;
Vector cart=(Vector)session.getAttribute("cart");
if(cart==null){
cart=new Vector();
}else{
for(int i=0;i<cart.size();i++){
bookelement bookitem=(bookelement)cart.elementAt(i);
if(bookitem.ISBN.equals(mybookelement.ISBN)){ //此处必须用equals方法,不能用==
bookitem.number++;
cart.setElementAt(bookitem,i);
Flag=false;
}
}
}
if(Flag)cart.addElement(mybookelement);
session.setAttribute("cart",cart);
rs.close();
response.sendRedirect("cart_see.jsp");
%>

------解决方案--------------------
探讨
引用:

这个购物车项目我们刚刚做完,名字叫做"bookstore"


不就购物车么 还作为项目 EJB3里 直接用 有状态BEAN 几句话搞定的东西。。。

------解决方案--------------------
其实挺简单的,如果你不需要用户退出后数据依然存在的话,那直接用jsp就可以完成了。
1.首先定义物品,一种物品有ID,NAME,PRICE这3中属性
2.选购页面定义一个map,key为物品的id,value为物品的数量。在点击提交之后,将此map存入session中
3.提交页面获取session中的map,依次取出map中的key值和value值,再去寻找对应key的物品的id,用value中的值来计算price。这样页面就可以显示出购物车中购买的东西数量、名称、价格已经物品总价了。
楼主可以试试。
------解决方案--------------------
为什么不存到数据库呢?如果你关掉了浏览器,下一次进入的时候购物车不就没有东西了,如果我想购买以前购物车的东西怎么办,建议用数据库或者cookie来