使用session技術實現購物車的功能

轉自:http://www.cnblogs.com/yejiurui/archive/2012/10/04/2711503.html

代碼下載:http://download.csdn.net/detail/frt007/9520418



使用session技術來實現網上商城購物車的功能

首先、簡單的瞭解session和cookie的區別:

一、session和cookie的區別:

session是把用戶的數據寫到用戶獨佔的session中(服務器端)

cookie是把用戶的數據寫給用戶的瀏覽器。

session對象由服務器創建,開發人員可以調用request對象的getsession方法得到session對象。

 

首先寫頁面代碼,仍然藉助於商品瀏覽記錄來寫:

1、jsp購買頁面代碼如下:

 

 

 

複製代碼
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@page import="java.util.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>購物頁面</title>
</head>
<body>
<h1>商品列表</h1>
<ul >
    <li><a href="/myday07/addcookie?id=1">java基礎</a><a href="/myday07/buysession?id=1">購買</a></li>
    <li><a href="/myday07/addcookie?id=2">javaweb</a><a href="/myday07/buysession?id=2">購買</a></li>
    <li><a href="/myday07/addcookie?id=3">DHTML</a><a href="/myday07/buysession?id=3">購買</a></li>
    <li><a href="/myday07/addcookie?id=4">數據庫</a><a href="/myday07/buysession?id=4">購買</a></li>
    <li><a href="/myday07/addcookie?id=5">Struts</a><a href="/myday07/buysession?id=5">購買</a></li>
    <li><a href="/myday07/addcookie?id=6">Spring</a><a href="/myday07/buysession?id=6">購買</a></li>
    <li><a href="/myday07/addcookie?id=7">Hibernate</a><a href="/myday07/buysession?id=7">購買</a></li>
</ul>
<h1>最近訪問記錄</h1><h5><a href="/myday07/clearcookie">清空數據</a> </h5>
<%
    String[] arr = {"java基礎","javaweb","DHTML","數據庫","Struts","Spring","Hibernate"};
    // 獲得所有cookie
    Cookie[] cookies = request.getCookies();

    // 在cookie中查找商品瀏覽記錄
    String visitlist = null;
    if(cookies!=null){
        for (Cookie cookie : cookies) {
            if (cookie.getName().equals("visitlist")) {
                visitlist = cookie.getValue();
                break;
            }
        }
        
        if(visitlist==null){ // 商品列表不存在
            out.println("");
        }else{
            String[] existIds = visitlist.split(",");
            for(String existId:existIds){
                int id = Integer.parseInt(existId);
                out.println(arr[id-1]+"<br/>");
            }
        }
    }
%>
<hr>

<h1>購物車列表</h1>

<%
     //1.獲得購物車列表
     Map<String, Integer> cart=(Map<String, Integer>)session.getAttribute("cart");
    //2.遍歷map輸出
    if(cart!=null){
    Set<String> keys=cart.keySet();
    for(String id:keys)
    {
        int number=cart.get(id);//每件商品的數量
        int idInt=Integer.parseInt(id);
        String productName=arr[idInt-1];
        out.println("商品名稱:"+productName+",商品數量:"+number+"<br/>");
        }
    }
%>

<hr/>
</body>
</html>
複製代碼

2、編寫商品瀏覽記錄的servlet頁面

複製代碼
package cn.itcast.cookie;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class addCookie extends HttpServlet {

    // 獲得用戶當前訪問商品,更新到商品瀏覽記錄列表
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 自動刷新
        response.setHeader("refresh", "2;url=/myday07/products1.jsp");

        // 1、獲得當前用戶瀏覽商品id
        String id = request.getParameter("id");
        // 2、獲得用戶瀏覽記錄列表
        Cookie[] cookies = request.getCookies();
        // 查找訪問記錄列表 name:visitlist ----- 1,3,5,6
        String visitlist = null;
        if (cookies != null) { // 存在cookie
            for (Cookie cookie : cookies) {
                if (cookie.getName().equals("visitlist")) {
                    visitlist = cookie.getValue();
                    break;
                }
            }
            if (visitlist == null) {
                // 列表不存在,當前商品第一件商品
                Cookie cookie = new Cookie("visitlist", id);
                cookie.setMaxAge(60 * 60);
                response.addCookie(cookie);
                response.getWriter().println("add success");
            } else {
                // 3、判斷當前商品是否已經在列表中
                String[] existIds = visitlist.split(",");
                for (String exsitId : existIds) {
                    if (exsitId.equals(id)) { // id存在在列表中
                        response.getWriter().println("add success");
                        return;
                    }
                }
                // 4、如果當前商品不在列表中,添加到列表
                Cookie cookie = new Cookie("visitlist", visitlist + "," + id);
                cookie.setMaxAge(60 * 60);
                response.addCookie(cookie);
                response.getWriter().println("add success");
            }
        } else {
            // 表示 並沒有該站點的任何cookie
            Cookie cookie = new Cookie("visitlist", id);
            cookie.setMaxAge(60 * 60);
            response.addCookie(cookie);
            response.getWriter().println("add success");
        }
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }

}
複製代碼

3、編寫清除緩存的cookie頁面

複製代碼
package cn.itcast.cookie;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class clearCookie extends HttpServlet
{

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException
    {
        Cookie cookie=new Cookie("visitlist","");
        cookie.setMaxAge(0);
        response.addCookie(cookie);
        response.sendRedirect("/myday07/products1.jsp");
        

    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException
    {
        doGet(request, response);
    }

}
複製代碼

4、編寫商品購買頁面

複製代碼
package cn.itcast.cookie;

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;
import javax.servlet.http.HttpSession;

public class BuySession extends HttpServlet
{
    //添加商品到購物車
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException
    {
        //1.獲得商品的id
        String id=request.getParameter("id");
        //2.獲得購物車cart--從session得到
        HttpSession session=request.getSession();
        Map<String, Integer> cart=(Map<String, Integer>)session.getAttribute("cart");//如果session中沒有購物車呢
        if(cart==null)
        {//原來的session中並不存在購物車
            cart=new HashMap<String, Integer>();
        }
        //3.判斷商品是否存在購物車中
        if(cart.containsKey(id))
        {
            //4.存在數量+1
            int number=cart.get(id);
            cart.put(id, number+1);
        }else{
            //5.不存在 將商品存入購物車   數量1
            cart.put(id, 1);
        }
        session.setAttribute("cart", cart);
        
        response.sendRedirect("/myday07/products1.jsp");//重定向回去
        
        
    }
    
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException
    {
        doGet(request, response);
    }

}
複製代碼

最終效果如下:


發佈了14 篇原創文章 · 獲贊 26 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章