使用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);
    }

}
复制代码

最终效果如下:


  • 2
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个简单的Java程序,使用Session技术实现购物功能。该程序使用了一个名为ShoppingCart的JavaBean来表示购物使用Session来存储购物的状态。 ShoppingCart.java ```java import java.util.ArrayList; import java.util.List; public class ShoppingCart { private List<String> items; public ShoppingCart() { items = new ArrayList<String>(); } public void addItem(String item) { items.add(item); } public void removeItem(String item) { items.remove(item); } public List<String> getItems() { return items; } public int getItemCount() { return items.size(); } public void clear() { items.clear(); } } ``` ShoppingCartServlet.java ```java import java.io.IOException; import java.io.PrintWriter; import java.util.List; 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 ShoppingCartServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取Session对象 HttpSession session = request.getSession(); // 获取购物对象 ShoppingCart cart = (ShoppingCart) session.getAttribute("cart"); if (cart == null) { // 如果Session中没有购物对象,创建一个新的购物对象并存储到Session中 cart = new ShoppingCart(); session.setAttribute("cart", cart); } // 获取操作类型 String action = request.getParameter("action"); if (action == null) { // 显示购物内容 response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html><body>"); List<String> items = cart.getItems(); if (items.isEmpty()) { out.println("<p>Your shopping cart is empty</p>"); } else { out.println("<p>You have the following items in your shopping cart:</p>"); out.println("<ul>"); for (String item : items) { out.println("<li>" + item + "</li>"); } out.println("</ul>"); } out.println("<a href=\"?action=clear\">Clear cart</a>"); out.println("</body></html>"); } else if (action.equals("add")) { // 添加物品到购物中 String item = request.getParameter("item"); cart.addItem(item); response.sendRedirect(request.getContextPath() + "/cart"); } else if (action.equals("remove")) { // 从购物中删除物品 String item = request.getParameter("item"); cart.removeItem(item); response.sendRedirect(request.getContextPath() + "/cart"); } else if (action.equals("clear")) { // 清空购物 cart.clear(); response.sendRedirect(request.getContextPath() + "/cart"); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } ``` 在ShoppingCartServlet中,我们首先获取Session对象,并从Session中获取购物对象。如果Session中没有购物对象,我们就创建一个新的购物对象并存储到Session中。 然后,我们根据操作类型执行相应的操作。如果操作类型为null,我们就显示购物中的内容。如果操作类型为add,我们就将物品添加到购物中。如果操作类型为remove,我们就从购物中删除物品。如果操作类型为clear,我们就清空购物。 需要注意的是,在Servlet中我们使用了重定向来避免表单重复提交的问题。当我们添加、删除或清空购物时,我们会重定向到/cart页面来避免表单重复提交的问题。 在JSP页面中,我们可以使用表单来向Servlet发送请求来操作购物。例如,我们可以使用以下代码来添加一个物品到购物中: ```html <form action="<%=request.getContextPath()%>/cart?action=add" method="post"> <input type="text" name="item"> <input type="submit" value="Add to cart"> </form> ``` 当我们提交表单时,Servlet会将物品添加到购物中,并重定向到/cart页面,显示购物中的内容。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值