【高分】jsp 用session 实现购物车功能,不用数据库

TheRealBo 2011-11-02 08:21:40
使用session对象及其他JSP内置对象实现简单的网上购书系统(不用数据库),至少包括图书的网上购买(添加至购物车,设置选购本数),从购物车删除以及结账等功能,功能尽量与网上购书类似。
应该怎么实现,刚学jsp没有思路
...全文
1268 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
yishihuakai 2012-08-16
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]
购物车通常都是对本机浏览器的cookie进行读写操作,session是不可取的,特别是服务器负载量比较大的时候。购买确认之后才进行入库操作。


所谓curd就是,creat,update,read,delete,取每个单词首字母的缩写。
[/Quote]
cookie很不安全啊,如果用户拒绝cookie写入怎么办呢?如果直接写入数据库的话,购物车会很频繁的与数据库进行交互,效率会很低。。。。。。肿么办?
kouyiSC 2011-11-03
  • 打赏
  • 举报
回复
用好session就行了。。。
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zhuchao_ko 的回复:]
引用 6 楼 dongvsning 的回复:

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


不就购物车么 还作为项目 EJB3里 直接用 有状态BEAN 几句话搞定的东西。。。
[/Quote]
我们刚学jsp一个月,购物车对于前辈的确是小case
funfenffun 2011-11-03
  • 打赏
  • 举报
回复

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");
%>
andrewsway 2011-11-03
  • 打赏
  • 举报
回复
用hashtable,做键值对,或者直接做成泛型对象,放在session里就行了,不过我也同样建议用cookie(注意cookie数量、大小限制)
chaishu2005 2011-11-03
  • 打赏
  • 举报
回复

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


所谓curd就是,creat,update,read,delete,取每个单词首字母的缩写。
chabale 2011-11-03
  • 打赏
  • 举报
回复
为什么不存到数据库呢?如果你关掉了浏览器,下一次进入的时候购物车不就没有东西了,如果我想购买以前购物车的东西怎么办,建议用数据库或者cookie来保存购物车的内容
zhu6100441 2011-11-03
  • 打赏
  • 举报
回复 1
其实挺简单的,如果你不需要用户退出后数据依然存在的话,那直接用jsp就可以完成了。
1.首先定义物品,一种物品有ID,NAME,PRICE这3中属性
2.选购页面定义一个map,key为物品的id,value为物品的数量。在点击提交之后,将此map存入session中
3.提交页面获取session中的map,依次取出map中的key值和value值,再去寻找对应key的物品的id,用value中的值来计算price。这样页面就可以显示出购物车中购买的东西数量、名称、价格已经物品总价了。
楼主可以试试。
朱超ZhuChao.Tech 2011-11-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dongvsning 的回复:]

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

不就购物车么 还作为项目 EJB3里 直接用 有状态BEAN 几句话搞定的东西。。。
scrack 2011-11-02
  • 打赏
  • 举报
回复
刚学可以不用数据库 做 但是后期 还是要用数据库 否则 问题一大堆
  • 打赏
  • 举报
回复
这个购物车项目我们刚刚做完,名字叫做"bookstore"
magong 2011-11-02
  • 打赏
  • 举报
回复
不用数据库是对问题的简化而不是加难度。
在application域中放所有书的清单,
在session域中放本次购书的记录清单(也就是所谓的购物车),
...
其他不多说了,很多书上都有完整例程的。

CRUD就是数据的增查改删,虽然不必在数据库上做了,但还是需要在存书清单上做的。
  • 打赏
  • 举报
回复
public class CartBookServlet extends HttpServlet{

protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
BookService service = new BookService();
req.setCharacterEncoding("utf-8");
String[] bids = req.getParameterValues("bookId");
HttpSession session = req.getSession();
//从session中取出购物车
Map<String, Book> cart = (Map)session.getAttribute("cart");
//如果没有,则创建一个
if (cart == null) {
cart = new HashMap<String, Book>();
}
//在购物车中遍历要添加的商品,如果已经存在,则数量加1
//否则设置数量为1,存入购物车
for (String bid : bids) {
Book book_in_cart = cart.get(bid);
if (book_in_cart != null) {
book_in_cart.setCount(book_in_cart.getCount()+1);
} else {
Book book = new Book();
int b_id = Integer.parseInt(bid);
book = service.queryBookById(b_id);
book.setCount(1);
cart.put(bid, book);
}
}
session.setAttribute("cart", cart);
resp.sendRedirect("cart.jsp");
}

}
  • 打赏
  • 举报
回复
Marking servlet IndexServlet as unavailable 谁知道这个错误怎么解决
TheRealBo 2011-11-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 leehomwong 的回复:]

先把页面写出来,后台无非做的CURD的操作,不难的..购物车就放session里
[/Quote]
【楼主回复】什么是curd操作?本人菜鸟,刚学jsp
24K純帥 2011-11-02
  • 打赏
  • 举报
回复
先把页面写出来,后台无非做的CURD的操作,不难的..购物车就放session里

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧