JAVA中实现session实现购物车原理思路(付源码)
2016-12-20 16:21
531 查看
假如我们要做一个简单的购物车,首先分析下购物车的组成部分.假使我们现在只需要两个属性,一个是商品的实体,另一个是商品的数量.业务中可以利用简单的map集合来实现购物车通过分析我们知道,如果想获取用户的购物车,且是自己的购物车,里面寄存了我们曾购买的物品属性和数量,我们想到了session这个对象,先来了解下session,以下资料借鉴网络
简单的了解之后,先分析下思路,当用户点击”加入到购物车”时,假使我从session取得购物车,首先要判断用户是不是第一次购物,如果是第一次购物,我们需要为用户创建购物车,如果不是则需要判断用户所选择的商品购物车里有没有(我们可以获取map的对象,我们迭代里面的商品,通过OID判断是不是为同一商品,或者通过其他方法获取到商品),如果没有我们需要在购物车里添加商品,如果有的话我们去得商品的数量,再+,在放回购物车里即可完成一次购物.最后把购物车放在session域中.代码实现如下:
JSP页面源代码为:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Java代码是:
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页面源码为:
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
一个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>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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 { /* * 1、获取到id * 2、得到商品名称创建一个数组 * 3、判断是否是第一次购物 (得到session,是否为空) * 创建一个购物车 使用map<String,Integer> * 把商品名称和数量1放入到购物车 * 4、不是第一次购物 * 判断是否有相同名称的session值 * 有相同的,得到商品的数量+1 * 没有,直接吧商品名称和数量加入到购物车 * 5、把购物车(map)放入到session里面 */ //获取id String id1 = request.getParameter("id"); //把string转换成int int id = Integer.parseInt(id1); //得到商品的名称,数组代替数据库 String[] names = {"手电","电视","冰箱","手机"}; //根据获取value String name = names[id-1]; //判断是否是第一次购物 cart getAttribute(java.lang.String name) @SuppressWarnings("unchecked") Map<String,Integer> map = (Map<String, Integer>)request.getSession().getAttribute("cart"); //判断map是否为空 if(map == null) {//第一次购物 //创建购物车 map = new HashMap<String,Integer>(); //把商品名称和数量放入到map中(购物车中) map.put(name, 1); } else { //不是第一次购物 //判断是否有相同名称session //第一种方式可以遍历 if(map.containsKey(name)) {//有相同名称的key //得到商品的数量,+1 int num = map.get(name); //把num+1,放到购物车 map.put(name, num+1); } else { //没有相同的key //直接把商品名和数量1添加到购物车 map.put(name, 1); } } //把购物车放到session里面 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</ti b5bb tle> </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
相关文章推荐
- JAVA中实现session实现购物车原理思路(付源码)
- java中使用线程实现Timer(定时器)原理和源码
- java中使用线程实现Timer(定时器)原理和源码
- java购物车的实现 中实现基于Session和Cookie的购物车
- java-web京东购物网 加入购物车与查看购物车的实现运用session服务器端(在数据库中查询)
- java购物车的实现 基于Session和Cookie的购物车
- java中使用线程实现Timer(定时器)原理和源码
- java中使用线程实现Timer(定时器)原理和源码
- [Java IO源码]缓冲流的实现原理
- 初读java源码:详解System.out.print实现原理
- Java java.util.HashMap实现原理源码分析
- java中使用线程实现Timer(定时器)原理和源码
- java中使用线程实现Timer(定时器)原理和源码
- Java程序员从笨鸟到菜鸟之(四十六)细谈struts2(八)拦截器的实现原理及源码剖析
- java中使用线程实现Timer(定时器)原理和源码
- java中使用线程实现Timer(定时器)原理和源码
- java中使用线程实现Timer(定时器)原理和源码
- java中使用线程实现Timer(定时器)原理和源码
- Java中HashMap详解 - HashMap源码及实现原理
- Java乔晓松-网上购物中用Session实现的购物车