使用会话完成一个简单的购物车

如何使用会话存取数据:

  存数据:

    1.获取HttpSession对象:HttpSession session = request.getSession();

    2.session.setAttribute("name", somethingToStore);

  取数据:

    1.获取HttpSession对象:HttpSession session = request.getSession();

    2.somethingToStore something = session.getAttribute("name");

  删除数据:

    1.获取HttpSession对象:HttpSession session = request.getSession();

    2.session.removeAttribute("name");

 

功能描述:

  1.在jsp页面中显示商品列表

  2.添加商品到购物车

       3.浏览购物车

  4.清空购物车

 

功能实现:

  1.数据模型:使用一个静态的map(以商品ID为键,以商品名称为值)表示整个商品列表,使用另一个map(以商品ID为键,以商品数量为值)来表示某种商品的数量

  2逻辑处理:当需要添加一个商品时,需要获得该商品的ID,把它作为请求参数传递到浏览购物车页面,然后将该ID取出,以此为键,增加会话中购物车相应商品的数量;

         当需要清空购物车时,将购物车从会话中移去

  3.显示:显示购物车:遍历表示购物车的map,得到每种商品的ID和数量,通过商品的ID再结合表示商品列表的map就可以得到商品的名称,有了商品的名称和数量,就可以处理显示工作

       显示商品列表:遍历表示商品列表的map,得到每个商品和对应的ID,然后没每个商品添加一个购买链接(以商品ID为请求参数)

  

在部署描述符中配置会话:

<jsp-config>
        <jsp-property-group>
            <url-pattern>*.jsp</url-pattern>
            <url-pattern>*.jspf</url-pattern>
            <page-encoding>UTF-8</page-encoding>
            <scripting-invalid>false</scripting-invalid>
            <include-prelude>/WEB-INF/jsp/base.jspf</include-prelude>
            <trim-directive-whitespaces>true</trim-directive-whitespaces>
            <default-content-type>text/html</default-content-type>
        </jsp-property-group>
    </jsp-config>
    
    
    <session-config>
        <session-timeout>30</session-timeout><!-- 会话的存活时间为30分钟 -->
        <cookie-config>
            <http-only>true</http-only>
        </cookie-config>
     <!--使用Cookie技术追踪会话ID-->
<tracking-mode>COOKIE</tracking-mode> </session-config>
StoreServlet.java
import java.io.IOException;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet(
        name = "storeServlet",
        urlPatterns = "/shop"
)
public class StoreServlet extends HttpServlet{
    // 创建一个静态数据库
    private final Map<Integer, String> products = new Hashtable<>();
    
    public StoreServlet(){
        this.products.put(1, "Sandpaper");
        this.products.put(2, "Nails");
        this.products.put(3, "Paint");
        this.products.put(5, "Tape");
    }
    
    // 在doGet()中实现3中操作----brows、addToCart和viewCart
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String action = request.getParameter("action");
        if(action == null)
            action = "browse";
        
        switch(action){
            case "addToCart": 
                this.addToCart(request, response);
                break;
            case "viewCart":
                this.viewCart(request, response);
                break;
            case "emptyCart":
                this.emptyCart(request, response);
                break;
            case "browse":
            default:
                this.browse(request, response);
                break;
        }
    }

    private void emptyCart(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.getSession().removeAttribute("cart");
        response.sendRedirect("shop?action=viewCart");
    }

    private void browse(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setAttribute("products", this.products);
        request.getRequestDispatcher("/WEB-INF/jsp/view/browse.jsp").forward(request, response);
    }

    private void viewCart(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setAttribute("products", this.products);
        request.getRequestDispatcher("/WEB-INF/jsp/view/viewCart.jsp").forward(request, response);
    }

    private void addToCart(HttpServletRequest request, HttpServletResponse response) throws IOException {
        int productId;
        try {
            productId = Integer.parseInt(request.getParameter("productId"));
        } catch (Exception e) {
            response.sendRedirect("shop");
            return;
        }
        
        HttpSession session = request.getSession();
        if(session.getAttribute("cart") == null)
            session.setAttribute("cart", new HashMap<Integer, Integer>());
        
        // 存储商品数量
        @SuppressWarnings("unchecked")
        Map<Integer, Integer> cart = (Map<Integer, Integer>) session.getAttribute("cart");
        if(!cart.containsKey(productId))
            cart.put(productId, 0);
        
        cart.put(productId, cart.get(productId) + 1);
        
        response.sendRedirect("shop?action=viewCart");
    }
}
 

browse.jsp

<%@ page import="java.util.Map" %>
<!DOCTYPE html>
<html>
    <head>
        <title>Product List</title>
    </head>
    <body>
        <h2>Product List</h2>
        <a href="<c:url value="shop?action=viewCart"/>">View Cart</a><br/><br/>
        <%
            Map<Integer, String> products = (Map<Integer, String>)request.getAttribute("products");
            
            for(int id : products.keySet()){
                %>
                    <a href="
                        <c:url value="/shop">
                            <c:param name="action" value="addToCart"/>
                            <c:param name="productId" value="<%= Integer.toString(id) %>" />
                        </c:url>
                    "><%= products.get(id) %></a><br/>
                <%
            }
        %>
    </body>
</html>

 

viewCart.jsp

<%@ page import="java.util.Map" %>
<!DOCTYPE html>
<html>
    <head>
        <title>View Cart</title>
    </head>
    <body>
        <h2>View Cart</h2>
        <a href="<c:url value="/shop"/>">Product List</a><br/><br/>
        <%
            Map<Integer, String> products = (Map<Integer, String>)request.getAttribute("products");
            Map<Integer, Integer> cart = (Map<Integer, Integer>) session.getAttribute("cart");
            
            if(cart == null || cart.size() == 0)
                out.print("Your cart is empty.");
            else{
                for(int id : cart.keySet()){
                    out.println(products.get(id) + " (qty: " + cart.get(id) + ")<br/>");
                }
            }
        %>
        <a href="<c:url value="/shop?action=emptyCart"/>">Empty Cart</a><br/>
    </body>
</html>

 

base.jspf

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

 

运行结果:

商品列表:

点击购买链接后查看购物车:

清空购物车:

转载于:https://www.cnblogs.com/aristole/p/8030062.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
收藏夹和购物车系统的实现  收藏夹子系统 (1) 【收藏指定图书】能收藏一本图书,并记录收藏日期(某年某月某日,如2016-12-12。所有日期都采用人工定义方式输入,不取机器日期)。图书的信息包括图书号(是唯一的)、书名、作者、出版社、出版日期、价格。 (2) 【查询指定图书】能按照图书号查询显示收藏夹中图书的相关信息(也可以扩展功能为按照书名、作者、出版社、出版日期、指定价格大小范围查询显示收藏夹中图书的相关信息)。 (3) 【按日期显示所有图书】能按照收藏日期的先后显示输出所收藏的所有图书的相关信息。 (4) 【移出收藏夹】可以把不想收藏的某一本指定图书号的图书直接移出收藏夹。 (5) 【加入购物车】将收藏夹中的某一本指定图书号的图书加入到购物车。 (6) 【按价格显示所有图书】能按照价格的大小显示输出收藏夹中的所有图书的相关信息。  购物车子系统 (1) 【直接加入购物车】把准备购买的一本图书直接加入购物车,同时记录加入购物车的日期。图书的信息包括图书号(是唯一的)、书名、作者、出版社、出版日期、价格、购买数量、购买金额(自动计算)。 (2) 【查询指定图书】能按照图书号查询显示购物车中准备购买的图书的相关信息(也可以扩展功能为按照书名、作者、出版社、出版日期、指定价格大小范围查询显示购物车中图书的相关信息)。 (3) 【修改购买数量】可以修改购物车中准备购买的某一本指定图书号的图书的数量,同时自动计算修改购买金额(购买金额=购买数量*价格)。 (4) 【删除指定图书并移到收藏夹】把购物车中的某一本指定图书号的图书删除并移到收藏夹。 (5) 【直接删除指定图书】可以把不想购买的某一本指定图书号的图书从购物车中删除。 (6) 【按图书号显示所有图书】把购物车中所有图书按照图书号列出每一本图书的图书号、书名、作者、出版社、出版日期、价格、购买数量、购买金额,最后列出总共有多少本图书、总金额是多少。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值