假如我们要做一个简单的购物车,首先分析下购物车的组成部分.假使我们现在只需要两个属性,一个是商品的实体,另一个是商品的数量.业务中可以利用简单的map集合来实现购物车通过分析我们知道,如果想获取用户的购物车,且是自己的购物车,里面寄存了我们曾购买的物品属性和数量,我们想到了session这个对象,先来了解下session,以下资料借鉴网络
一个session就是一系列某用户和服务器间的通讯。服务器有能力分辨出不同的用户。一个session的建立是从一个用户向服务器发第一个请求开始,而以用户显式结束或session超时为结束。
其工作原理是这样的:
1.当一个用户向服务器发送第一个请求时,服务器为其建立一个session,并为此session创建一个标识号;
2.这个用户随后的所有请求都应包括这个标识号。服务器会校对这个标识号以判断请求属于哪个session。
这种机制不使用IP作为标识,是因为很多机器是通过代理服务器方式上网,没法区分每一台机器。
对于session标识号(sessionID),有两种方式实现:cookies和URL重写。
简单的了解之后,先分析下思路,当用户点击”加入到购物车”时,假使我从session取得购物车,首先要判断用户是不是第一次购物,如果是第一次购物,我们需要为用户创建购物车,如果不是则需要判断用户所选择的商品购物车里有没有(我们可以获取map的对象,我们迭代里面的商品,通过OID判断是不是为同一商品,或者通过其他方法获取到商品),如果没有我们需要在购物车里添加商品,如果有的话我们去得商品的数量,再+,在放回购物车里即可完成一次购物.最后把购物车放在session域中.代码实现如下:
JSP页面源代码为:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page import="cn.itcast.utils.*"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'product.jsp' starting page</title>
</head>
<body>
<h1>购物页面</h1>
<img src="/day11/img/1.jpg"/> <a href="/day11/sessionDemo2?id=1">加入到购物车</a>
<img src="/day11/img/2.jpg"/> <a href="/day11/sessionDemo2?id=2">加入到购物车</a>
<img src="/day11/img/3.jpg"/> <a href="/day11/sessionDemo2?id=3">加入到购物车</a>
<img src="/day11/img/4.jpg"/> <a href="/day11/sessionDemo2?id=4">加入到购物车</a>
</body>
</html>
Java代码是:
package cn.itcast.session;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 使用session实现购物车
* @author 柳成风
*/
public class SessionDemo2 extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String id1 = request.getParameter("id");
int id = Integer.parseInt(id1);
String[] names = {"手电","电视","冰箱","手机"};
String name = names[id-1];
getAttribute(java.lang.String name)
@SuppressWarnings("unchecked")
Map<String,Integer> map = (Map<String, Integer>)request.getSession().getAttribute("cart");
if(map == null) {
map = new HashMap<String,Integer>();
map.put(name, 1);
} else {
if(map.containsKey(name)) {
int num = map.get(name);
map.put(name, num+1);
} else {
map.put(name, 1);
}
}
request.getSession().setAttribute("cart", map);
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("<a href='/day11/session/product.jsp'>继续购物</a>" +
" <a href='/day11/session/cart.jsp'>结算</a>");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
购物车创建完毕,已经放进session中,同时向jsp页面相应.jsp页面源码为:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'cart.jsp' starting page</title>
</head>
<body>
<h2>商品结算</h2>
<h3><a href="/day11/sessionDemo3">清空购物车</a></h3>
<%
//获取session里面商品信息
Map<String,Integer> map = (Map<String,Integer>)request.getSession().getAttribute("cart");
//判断map是否为空
if(map == null) {
%>
<h3>没有任何购物信息</h3>
<%
} else {
//现在map里面存储的是商品名称和数量
//遍历map 两种 :1 获取所有key;2 获取key-value关系
Set<String> set = map.keySet();//所有商品的名称
//遍历set 两种 增强for 迭代
for(String name : set) {
//得到value值(商品数量)
int num = map.get(name);
%>
<h3>商品名称 :<%=name %>,商品数量:<%=num %></h3>
<%
}
}
%>
</body>
</html>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37