购物车用session怎么实现的

2025-02-02 14:02:40
推荐回答(2个)
回答1:

 public void doGet(HttpServletRequest request, HttpServletResponse response)
           throws ServletException, IOException {
       response.setContentType("text/html;charset=utf-8");
       PrintWriter out = response.getWriter();
       // 获得session
       request.getSession();    // 创建了一个session
      
       // 获得所有商品
       Map all = DB.getAll();
      
       out.write("本站提供如下商品
");
       for(Entry e : all.entrySet()) {
           Book book = e.getValue();
           // 超链接要url重写
           // url重写做了两件事情,第一,获得session的id,第二,将id加到地址后面
           String url = "/javaweb07/servlet/BuyServlet?id="+book.getId();
           String newUrl = response.encodeURL(url);
           out.write(book.getName() + "购买
");
       }
    }
 
BuyServlet.java
    public void doGet(HttpServletRequest request, HttpServletResponse response)
           throws ServletException, IOException {
       // 获得id
       String id = request.getParameter("id");
      
       // 找出书
       Book book = DB.find(id);
      
       // 获得购物车
       HttpSession session = request.getSession();
       List cart = (List) session.getAttribute("cart");
       if(cart==null) {
           // 刚进超市,分配购物车
           cart = new ArrayList();
       }
      
       // 加入购物车
       cart.add(book);
      
       // 将购物车找个地方存起来,方便下次购买
       session.setAttribute("cart", cart);
      
       // 第一次创建session的时候需要发Cookie,将sessionid带给浏览器
      
       // 获得sessionid
       String sessionid = session.getId();
       // 发送cookie,Cookie的key是区分大小写
       Cookie cookie = new Cookie("JSESSIONID", sessionid);
       // 设置有效时间
       cookie.setMaxAge(60*60*5);
       response.addCookie(cookie);
      
       // 请求重定向到购物车页面
       String url = "/javaweb07/servlet/ListCartServlet";
       // url重写
       String newUrl = response.encodeRedirectURL(url);
      
       response.sendRedirect(newUrl);
    }
 
 ListCarServlet
    public void doGet(HttpServletRequest request, HttpServletResponse response)
           throws ServletException, IOException {
       response.setContentType("text/html;charset=utf-8");
       PrintWriter out = response.getWriter();
      
       // 获取购物车
       // getSession方法会拿着用户的jsessionid去内存找session 找不到才创建
       HttpSession session = request.getSession();
      
       List cart = (List) session.getAttribute("cart");
      
       if(cart==null) {
           out.write("对不起!您还没有购买商品!!!");
           return ;
       }
      
       //遍历购物车中的商品显示
       out.write("您购买了如下商品:
");
      
       for(Book book : cart) {
           out.write(book.getName() + "," + book.getPrice() + "
");
       }
       // 让session立即失效
       //session.invalidate(); 
       out.write("");
    }

回答2:

建议使用hibernate持久类,这样可以保存对象到集合中,而不是数值,通过struts2标签库,直接访问持久化类