用session来做一个购物系统,怎么做?

wutingting529 2009-03-24 02:27:01
我是一个刚刚学习jsp的菜鸟,请帮帮我,把主要代码写出来吧,谢谢
...全文
106 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
suncheng_hong 2009-03-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 gf173237 的回复:]
去买一本jsp的教材,里面基本上都有这个实例.
[/Quote]
session 保存用户的 购物信息
feixiangclf 2009-03-25
  • 打赏
  • 举报
回复
写错了一句:session.setAttribute("en_list", list); 改为session.setAttribute("shop_list", list);
feixiangclf 2009-03-25
  • 打赏
  • 举报
回复
放如购物车程序,只将商品在数据库中的保存的id(主键)和购买的数量放入购物车,有什么其他需要自己修改。

<%
List oldlist = (List) session.getAttribute("shop_list");
if (oldlist == null) {
List list = new ArrayList();
session.setAttribute("en_list", list);
oldlist = (List) session.getAttribute("shop_list");
}
int pid = ParamUtil.getIntParameter(request, "pid", 0); //获得商品id
int num = ParamUtil.getIntParameter(request, "num", 0); //获得商品数量

if ((pid != 0) && (num != 0)) {
String insertstr = String.valueOf(pid) + "_" + String.valueOf(num);
if (oldlist.size() > 0) {
String str = "";
String proidstr = "";
String pronumstr = "";
int proid = 0;
int pronum = 0;
int sort = 0;
boolean existflag = false;

for (int i = 0; i < oldlist.size(); i++) {
str = (String) oldlist.get(i);
proidstr = str.substring(0, str.indexOf("_"));
proid = Integer.parseInt(proidstr);

if (pid == proid) {
existflag = true;
pronumstr = str.substring(str.indexOf("_") + 1, str.lastIndexOf("_"));
pronum = Integer.parseInt(pronumstr);
sort = i;
break;
}
}

if (existflag) {
pronum = pronum + num;
insertstr = String.valueOf(proid) + "_" + String.valueOf(pronum);
oldlist.set(sort, insertstr);
} else {
oldlist.add(insertstr);
}
} else {
oldlist.add(insertstr);
}
}
out.print("购买成功!请查看购物车!");
%>
gf173237 2009-03-25
  • 打赏
  • 举报
回复
去买一本jsp的教材,里面基本上都有这个实例.
wutingting529 2009-03-24
  • 打赏
  • 举报
回复
谢谢楼上的啊,但是我们现在只是学了session的一些方法而已,你这里的有些方法我并没有学过的,还有一些简单的吗,总之谢谢了
酒浪子 2009-03-24
  • 打赏
  • 举报
回复

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

HttpSession session=request.getSession();

/*使用Map集合实现购物车*/

BookBean bookBean=(BookBean)session.getAttribute("book");
//从session 中得到购物车对象
Map<String,CartItemBean> cartMap=(Map<String,CartItemBean>)session.getAttribute("cartMap");
if(session.getAttribute("cartMap")==null){//如果不存在,则创建一个新的购物车
cartMap=new HashMap<String,CartItemBean>();
session.setAttribute("cartMap", cartMap);
}
//从购物车中获取一个商品对象
CartItemBean cartItemBean=(CartItemBean)cartMap.get(bookBean.getIsbn());
if(cartItemBean==null){//如果为空,则添加一件新的商品
cartMap.put(bookBean.getIsbn(), new CartItemBean(bookBean,1));
}else{//不为空,则更新其数量
cartItemBean.setQuantity(cartItemBean.getQuantity()+1);
}

response.sendRedirect("/Books/viewCart.jsp");
}
wutingting529 2009-03-24
  • 打赏
  • 举报
回复
谢谢啦,但是可不可以给我一个准确的例子啊,我可以参考参考啊。谢谢啦
mtrhhy 2009-03-24
  • 打赏
  • 举报
回复
en a
yefei679 2009-03-24
  • 打赏
  • 举报
回复
你说的太泛了
session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。

当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识 - 称为 session id,如果已包含一个session id则说明以前已经为此客户端创建过session,服务器就按照session id把这个 session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个 session id将被在本次响应中返回给客户端保存。

保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发挥给服务器。一般这个cookie的名字都是类似于SEEESIONID,而。比如weblogic对于web应用程序生成的cookie,JSESSIONID= ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764,它的名字就是 JSESSIONID。

由于cookie可以被人为的禁止,必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。经常被使用的一种技术叫做URL重写,就是把session id直接附加在URL路径的后面,附加方式也有两种,一种是作为URL路径的附加信息,表现形式为http://...../xxx;jsessionid= ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764
另一种是作为查询字符串附加在URL后面,表现形式为http://...../xxx?jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764
这两种方式对于用户来说是没有区别的,只是服务器在解析的时候处理的方式不同,采用第一种方式也有利于把session id的信息和正常程序参数区分开来。
为了在整个交互过程中始终保持状态,就必须在每个客户端可能请求的路径后面都包含这个session id。

另一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。比如下面的表单
<form name="testform" action="/xxx">
<input type="text">
</form>
在被传递给客户端之前将被改写成
<form name="testform" action="/xxx">
<input type="hidden" name="jsessionid"
value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764">
<input type="text">
</form>
这种技术现在已较少应用,笔者接触过的很古老的iPlanet6(SunONE应用服务器的前身)就使用了这种技术。
实际上这种技术可以简单的用对action应用URL重写来代替。

在谈论session机制的时候,常常听到这样一种误解“只要关闭浏览器,session就消失了”。其实可以想象一下会员卡的例子,除非顾客主动对店家提出销卡,否则店家绝对不会轻易删除顾客的资料。对session来说也是一样的,除非程序通知服务器删除一个session,否则服务器会一直保留,程序一般都是在用户做log off的时候发个指令去删除session。然而浏览器从来不会主动在关闭之前通知服务器它将要关闭,因此服务器根本不会有机会知道浏览器已经关闭,之所以会有这种错觉,是大部分session机制都使用会话cookie来保存session id,而关闭浏览器后这个 session id就消失了,再次连接服务器时也就无法找到原来的session。如果服务器设置的cookie被保存到硬盘上,或者使用某种手段改写浏览器发出的HTTP请求头,把原来的session id发送给服务器,则再次打开浏览器仍然能够找到原来的session。

恰恰是由于关闭浏览器不会导致session被删除,迫使服务器为seesion设置了一个失效时间,当距离客户端上一次使用session的时间超过这个失效时间时,服务器就可以认为客户端已经停止了活动,才会把session删除以节省存储空间。

81,095

社区成员

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

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