java web 做购物车的大概思路,和实现步奏是啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java web 做购物车的大概思路,和实现步奏是啥?相关的知识,希望对你有一定的参考价值。

购物车管理模块主要功能有如下几个部分:(1)创建购物车 当客户登录后,系统会给客户创建一个购物车放入服务器的Session会话中。使客户在整个会话中都拥有一个相同的购物车。这里主要运用了Http协议中的会话机制,将购物车保存在客户的会话中,这样在整个客户游览不同页面商品的过程中,都会使用同一个购物车对象。 具体执行步骤:(1)从客户的请求对象中获取Session会话对象(2)从会话对象中获取购物车对象(3)判断是购物车对象是不是空的,如果是空是就创建一个 /* * 在监听到session被创建之后,就立即向session中添加一个购物车Car; */ public void sessionCreated(HttpSessionEvent arg0) HttpSession session = arg0.getSession(); Cart cart=new Cart(); session.setAttribute("cart", cart); /* * 从session中获得购物车 */ Cart cart = (Cart) session.getAttribute("cart"); if (cart == null) cart = new Cart(); (2)向购物车中添加一个商品项 客户在查看网页上的一个商品时,当向服务器发送一个“添加到购物车”的请求时,会执行这个功能。功能执行过程:(1)从客户请求对象中获取商品的ID(2)调用业务层的方法根据商品ID去数据查询商品的信息,返回商品对象(3)从商品对象中获取商品名,商品价格,来构建一个商品项对象(4)从Session会话中获取购物车对象(5)调用业务层的方法来根据购物车对象和商品项对象来执行添加操作(6)将些商品项对象放入到购物车中 部分实现代码: /* * 从数据库中把商品取到; */ ProductService productService = (ProductService) ServiceFactory.getInstance().getService(Globals.PRODUCT_SERVICE); Integer id = Integer.parseInt(request.getParameter("productid")); Product product = productService.getProductById(id); /* * 在向购物车中添加商品的时候会判断商品是否已经存在, * 已存在的就不让在加入了; */ if (cart.isExist(id)) message = "该商品已经存在!请<a onclick='javascript:history.go(-1)'>返回</a>!"; request.setAttribute("message", message); return mapping.findForward("error"); else /* * 向购物车添加一个商品; */ cart.addCart(product); session.setAttribute("cart", cart); return mapping.findForward("addcartsuccess"); 参考技术A 1。session 中创建购物车集合
2。产品页面中添加向购物车追加内容的连接(向购物车集合中添加实体类)
3。把购物车集合保存到session中
参考技术B 最好是建个购物车的表来存放数据,这样就与session无关啦,简单些就商品Id+客户Id+商品的数量,当然也可以有商品价格和总金额之类的方便查看。 参考技术C 是用HashMap,存商品编号和商品数量,如果已经存在此商品,则数量叠加,然后用session保存。

cookie来实现购物车功能

一、大概思路

  1、从cookie中取商品列表

  2、判断要添加的商品是否存在cookie中。

  3、如果已添加过,则把对应的商品取出来,把要添加的商品的数量加上去。

  4、如果没有添加过,则把改商品添加到商品列表中。

  5、再把商品列表序列化,加入cookie中。

二、代码实现

  1、定义一个购物车商品的pojo

public class CartItem {

    private Long id;

    private String title;

    private Long price;

    private Integer num;

    private String image;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public Long getPrice() {
        return price;
    }

    public void setPrice(Long price) {
        this.price = price;
    }

    public Integer getNum() {
        return num;
    }

    public void setNum(Integer num) {
        this.num = num;
    }

    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }
}

  2、定义一个购物车的接口和实现类

public interface CartService {

    TaotaoResult addCartService(HttpServletRequest request, HttpServletResponse response, Long itemId, Integer num);
}
@Service
public class CartServiceImpl implements CartService {

    @Autowired
    private ItemService itemService;
    @Value("${COOKIE_EXPIRE}")
    private Integer COOKIE_EXPIRE;

    @Override
    public TaotaoResult addCartService(HttpServletRequest request, HttpServletResponse response, Long itemId, Integer num) {
        // 1.从cookie中取商品列表
        List<CartItem> list = getCartFromCookie(request);
        // 2.判断是否已经添加过购物车
        boolean haveflag = false;
        for (CartItem c : list) {
            //3.如果添加过,把对应的商品取出来,数量加Num
            if(c.getId().longValue() == itemId) {
                c.setNum(c.getNum() + num);
                haveflag = true;
                break;
            }
        }
        // 4.如果没添加过,则把该商品添加进去。
        if (!haveflag) {
            TbItem item = itemService.getItemById(itemId);
            CartItem cartItem = new CartItem();
            cartItem.setNum(num);
            cartItem.setId(itemId);
            cartItem.setPrice(item.getPrice());
            cartItem.setTitle(item.getTitle());
            if (item.getImage() != null) {
                String image = item.getImage();
                String[] strings = image.split(",");
                cartItem.setImage(strings[0]);
            }
            list.add(cartItem);
        }
        // 5.再把list返回到cookie中
        CookieUtils.setCookie(request, response, "TT_CART", JsonUtils.objectToJson(list), COOKIE_EXPIRE);
      
return TaotaoResult.ok(); } private List<CartItem> getCartFromCookie(HttpServletRequest request) { try { String json = CookieUtils.getCookieValue(request, "TT_TOKEN", true); List<CartItem> list = JsonUtils.jsonToList(json, CartItem.class); if (list == null) { return new ArrayList<>(); }else { return list; } }catch (Exception e) { return new ArrayList<>(); } } }

   3、controller来接收前端的请求,并响应到cart-success.jsp页面。

@Controller
public class CartController {

    @Autowired
    private CartService cartService;

    @RequestMapping("/cart/add/{itemId}")
    public String addCart(@PathVariable Long itemId, Integer num, HttpServletRequest request, HttpServletResponse response) {
        TaotaoResult result = cartService.addCartService(request, response, itemId, num);
        return "cart-success";
    }
}

 


以上是关于java web 做购物车的大概思路,和实现步奏是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何用java做一个购物车,用redis来缓存商品id

java web 开发 购物网站 怎么做订单结算部分????

从零写Java Web框架——请求的处理

cookie来实现购物车功能

javaweb开发 在购物车实现的问题

java的web应用问题: 请问怎样实现不同的用户对我们做的网站(医务系统)有不同的访问权限呢? 求思路…