购物车模块

学习开发购物车模块

发现一个问题,如果web.xml中配置映射路径中/servlet/***,在serlet中,跳转的时候,会在路径中自动添加/servlet,这个真是非常的恶心。下次设置映射的时候,不加/servlet.

首先给出购买页。这里用静态页面。

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP ‘shoMerchandise.jsp‘ starting page</title>

</head>

<body>
    <table width=424 " height="583" border="0" align="center">
        <tr>
            <td width="190"><img alt="hpcomputer"
                src="images/hppavilion.jpg"></td>
            <td width="224"><img src="images/lenovo.jpg">
            <td>
        </tr>
        <tr>
            <td>笔记本电脑</td>
            <td>移动硬盘
        </tr>
        <tr>
            <td>价格:5999.99元</td>
            <td>价格:688.88</td>
        </tr>
        <tr>
            <td>
            <a href="servlet/AddShoppingCart?id=0001&name=笔记本电脑&price=5999.00"><img src="images/buybutton.gif" width="71" height="21" border="0" /></a>
            </td>
            <td>
            <a href="servlet/AddShoppingCart?id=0002&name=移动硬盘&price=688.88"><img src="images/buybutton.gif" width="71" height="21" border="0"/></a>
        </tr>
    </table>
</body>
</html>

点击购买,跳转到addShoppingCart.java,这是一个servlet,处理的事件为把点击购买的商品添加到购物车中:

过程是,首先从session中读取shoppingcart,如果为空,则一个购物车类(通过javabean:ShoppingCart类),然后在session中新建一个购物车的信息。

session.setAttribute("shoppingcart", cart);

否则的话,就从session中读取出shoppingcart的信息。保存在javabean:ShoppingCart new cart中。

然后接收request传递到服务器的信息,并验证信息的合法性。

//获得商品的基本信息
        String id=request.getParameter("id");
        String name=request.getParameter("name");
        byte source [] = name.getBytes("iso8859-1");
         name = new String (source,"UTF-8");
        String quantity=request.getParameter("q");
        String price = request.getParameter("price");
        System.out.println(id+name+quantity+price);

        //检验要加入的商品信息
        if(StringTool.validateNull(id)||StringTool.validateNull("name")||StringTool.validateNull("price")||StringTool.validateNull("quantity")){
            printError(request,response);
            return;
        }
        id=StringTool.filterHtml(id);
        name=StringTool.filterHtml(name);

之后,执行cart的添加商品javebean:CartItem的addItem方法,把商品添加到cart中去。

        try{
            if(StringTool.validateNull(quantity)){
                //根据传入的商品数据创建商品,然后利用addCartItem方法添加进购物车
                cart.addItem(new CartItem(id,name,1,Double.parseDouble(price)));
                System.out.println(Double.parseDouble(price));
            }else{
                cart.addItem(new CartItem(id,name,Integer.parseInt(quantity),Double.parseDouble(price)));
            }
        }catch(NumberFormatException e){
            printError(request,response);
            return;
        }

这里并没有更新session,我这样理解:cart是建立的一个指针,它们之间(cart、session)是浅复制,所以不必更新session。

跳转到展示购物车的页面。

response.sendRedirect("GetShoppingCart");

这里就是我说的自动添加/servlet那个问题之一,按理说,按照映射的话,应该是/servlet/×××,但是由于是在servlet中跳转的,所以会自动在跳转路径中添加/servlet。

可以自己试一下。

如果商品添加失败,在输出错误信息。

下面是完整代码:AddShoppingCart.java

package com.cjg.servlet;

import java.io.IOException;
import java.io.PrintWriter;

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

import com.cjg.bean.CartItem;
import com.cjg.bean.ShoppingCart;
import com.cjg.tools.*;

public class AddShoppingCart extends HttpServlet {

    /**
         * The doGet method of the servlet. <br>
         *
         * This method is called when a form has its tag value method equals to get.
         *
         * @param request the request send by the client to the server
         * @param response the response send by the server to the client
         * @throws ServletException if an error occurred
         * @throws IOException if an error occurred
         */
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        doPost(request,response);
    }
    /**
         * The doPost method of the servlet. <br>
         *
         * This method is called when a form has its tag value method equals to post.
         *
         * @param request the request send by the client to the server
         * @param response the response send by the server to the client
         * @throws ServletException if an error occurred
         * @throws IOException if an error occurred
         */
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/html");
          response.setCharacterEncoding("utf-8");

        PrintWriter out = response.getWriter();
        response.setContentType("text/html;charset:utf-8");
        HttpSession session = request.getSession();//获取session
        ShoppingCart cart=(ShoppingCart) session.getAttribute("shoppingcart");
        //当购物车为空时
        if(cart==null){
            cart=new ShoppingCart();
            session.setAttribute("shoppingcart", cart);

        }

        //获得商品的基本信息
        String id=request.getParameter("id");
        String name=request.getParameter("name");
        byte source [] = name.getBytes("iso8859-1");
         name = new String (source,"UTF-8");
        String quantity=request.getParameter("q");
        String price = request.getParameter("price");
        System.out.println(id+name+quantity+price);

        //检验要加入的商品信息
        if(StringTool.validateNull(id)||StringTool.validateNull("name")||StringTool.validateNull("price")||StringTool.validateNull("quantity")){
            printError(request,response);
            return;
        }
        id=StringTool.filterHtml(id);
        name=StringTool.filterHtml(name);
        try{
            if(StringTool.validateNull(quantity)){
                //根据传入的商品数据创建商品,然后利用addCartItem方法添加进购物车
                cart.addItem(new CartItem(id,name,1,Double.parseDouble(price)));
                System.out.println(Double.parseDouble(price));
            }else{
                cart.addItem(new CartItem(id,name,Integer.parseInt(quantity),Double.parseDouble(price)));
            }
        }catch(NumberFormatException e){
            printError(request,response);
            return;
        }
        response.sendRedirect("GetShoppingCart");
        //System.out.println("ssss");
    }

    //商品添加失败的输出信息
    private void printError(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException {

        response.setContentType("text/html;charset:utf-8");
        PrintWriter out =response.getWriter();
        out.println("<html>");
        out.println("<head><title>购买商品失败</title></head>");
        out.println("<body>");
        out.println("<h1>缺少商品参数或者商品参数不正确,添加商品到购物车中不成功</h1><br><br>");
        out.println("<a href=\"/onlineshoppingcart/showMerchandise.htm\">继续浏览商品,添加商品到购物车</a><br>");
        out.println("</body>");
        out.println("</html>");
        out.flush();
        out.close();
    }

}

时间: 2024-10-07 09:46:27

购物车模块的相关文章

easymall项目的商品删除,前台商品分页,商品详情,购物车模块

简单的挑选一下昨天所学的重点知识模块,以备后续的复习 一.购物车模块1.1购物车两种实现的区别:!!!!!!!! 用session保存  缺点:浏览器关闭,session失效时保存在session中购物信息将会消失  后续优化,将购买的信息除了保存在session中以外,还要将购物的信息保存在cookie中,这样  就解决了浏览器关闭购买商品信息丢失的问题(但是解决不了跟换电脑信息丢失的问题)  优点:不用操作数据库,可以减少数据库访问压力 数据库中:  缺点:只用登录的用户才能添加购物车   

第六次博客作业:对bookstore项目中的购物车模块进行测试,并写出测试的缺陷报告。

缺陷编号:01.01.0001 发现人:Lmh 记录日期:2016-06-11 所属模块:购物车模块 确认人:Lmh 确认日期:2016-06-11 当前状态:公开 严重度:3 优先级:3 问题概述:重复购买同一本书,数量不会叠加,会更新成第二次购买的数量. 问题再现描述: 1.执行正常的购买书籍操作,购买数量为99. 2.查看购物车数量为99. 3.返回继续购买同一种书籍,选择购买数量为88. 4.这时查看购物车的该书籍数量会刷新为88. 问题隔离描述: 1.修改购买数量为其他任意数字,问题依

web day25 web day24 小项目练习图书商城, 购物车模块,订单模块,支付(易宝支付)

购物车模块 购物车存储: 保存在session中(本次使用的) 保存在cookie中 保存在数据库中 购物车相关类 购物车结构 CartItem:包含图书和数量,小计 Cart:包含一个Map<String,CartItem>和部分购物车操作方法 修改登录方法,在用户登录成功后,马上在session中添加一辆车 页面负责遍历存在session域中的购物车属性 添加购物车条目 清空购物车条目 指定删除购物车条目 图 我的购物车 top.jsp中存在一个链接:我的购物车 我的购物车直接访问/jsp

用JSP实现的商城购物车模块

这两天,在学习JSP,正好找个小模块来练练手: 下面就是实现购物车模块的页面效果截图: 图1. 产品显示页面 通过此页面进行产品选择,增加到购物车 图2 .购物车页面 图3 . 商品数量设置 好了,先不贴图了,直接上代码:先看看项目的文档结构把(麻雀虽小,五脏俱全): 整个项目包括三个类,两个JSP页面,以下分别把他们的代码贴上: Cart.java package shopping.cart; import java.util.ArrayList; import java.util.Itera

07 用户购物车模块

1 实现添加购物车的功能 前端的页面如下: 前端的页面分析: 要实现添加购物车的功能,前端要向后端传送的数据有商品的id和添加的数量,并且后端规定以post的方式发送给后端. 后端视图函数的业务逻辑 1 判断用户是否登陆,没登陆返回用户未登录 2 接受前端传来的参数 3 对参数进行校验,判断是否有空的参数,有为空的参数返回参数不完整 4 对传过来的商品id进行数据库查询,看数据库中是否有这个商品存在,没有返回商品不存在 5 对参数添加购物车的数量的类型判断,如果不是整数,返回参数错误 6 判断是

8、生鲜电商平台-购物车模块的设计与架构

说明:任何一个电商无论是B2C还是B2B都有一个购物车模块,其中最重要的原因就是客户需要的东西放在一起,形成一个购物清单,确认是否有问题,然后再进行下单与付款. 1. 购物车数据库设计: 说明:业务需求: 1>购物车里面应该存放,那个买家,买了那个菜品的什么规格,有多少数量,然后这个菜品的加工方式如何.(如果存在加工方式的话,就会在这里显示处理.) 2>买家存在购物起送价.也就是用户放入购物车的商品的总价格如果低于配置的起送价,那么这个提交按钮就是灰色的.(不可能你点一个洋葱我们就送过去,成本

D15 Sping Boot 入门 Sping框架--Java Web之书城项目(六) 购物车模块

需求分析 购物车模块 原文地址:https://www.cnblogs.com/nuister/p/12684743.html

PHP购物车模块的实现(php/ajax/session)

购物车网页代码 1.登录界面login.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta h

Vue 项目 购物车 模块

购物车 ajax 接口请求拆分到 service 文件夹中 // goods.js import axios from 'axios' export default { getGoodsInfo () { return axios.get('/api/goods') .then(res => { // 处理数据格式,并返回 const {code, data: goodsInfo, slider, keys} = res.data; if (code) { return {goodsInfo,