java购物车的实现 基于Session和Cookie的购物车



今天学习到了另外一种购物车的实现.和.net中的实现思路有些差异.在此做个总结
1、首先抽象出"购物车",由商品、购物车中的项、购物车三部分组成.
package  com.pf.entity;
import  java.io.Serializable;
/**
* 商品 类(我用的Food)
*  @author  PF
*/
public class  Food  implements  Serializable{
 private int food_id ;
     private  String  food_name ;
     public int  getFood_id() {
        return food_id ;
    }
     public void  setFood_id( int  food_id) {
        this . food_id  = food_id;
    }
     public  String getFood_name() {
        return food_name ;
    }
     public void  setFood_name(String food_name) {
        this . food_name  = food_name;
    }

}

package  com.pf.entity;
import  java.io.Serializable;
/**
*  购物车项
*  @author  PF
*
*/
public class  CartItem  implements  Serializable{
     private  Food  food ;
     private int count ;
     public  Food getFood() {
        return food ;
    }
     public void  setFood(Food food) {
        this . food  = food;
    }
     public int  getCount() {
        return count ;
    }
     public void  setCount( int  count) {
        this . count  = count;
    }
}

 

package  com.pf.entity;
import  java.io.Serializable;
import  java.util.ArrayList;
import  java.util.List;
/**
*  购物车类
*  @author  PF_CQ
*
*/
public class  Cart  implements  Serializable{
    List<CartItem>  list = new  ArrayList<CartItem>();
     public  List<CartItem> getList() {
        return list ;
    }
     public void  setList(List<CartItem> list) {
        this . list  = list;
    }
     public void  addCartItem(CartItem item){
        for (CartItem it :  list ){
            if (it.getFood().getFood_id()==item.getFood().getFood_id())
               return ;
       }
        list .add(item);
    }
     public void  removeItem(CartItem item){
        list .remove(item);
    }
     public void  clearCart(){
        list .clear();
    }
}

2、购物车抽象出来了,就要创建一个Session监听器,用于每次创建一个session之后都保存进一个键值对集合中,下次可以通过session的Id获取

package  com.pf.org;
import  java.util.HashMap;
import  java.util.Map;
import  javax.servlet.http.HttpSession;
import  javax.servlet.http.HttpSessionEvent;
import  javax.servlet.http.HttpSessionListener;
/**
* Session 监听器
*  @author  PF
*
*/
public class  SessionListener  implements  HttpSessionListener {
     //Session 集合
     public static  Map<String,HttpSession>  session_map = new  HashMap<String,HttpSession>();
     /**
     *  创建一个 session
     */
     public void  sessionCreated(HttpSessionEvent sessionEvent) {
       String session_id=sessionEvent.getSession().getId();
       System. out .println( "====== 创建了一个 Session,id 是 :" +session_id+ "======" );
        session_map .put(session_id, sessionEvent.getSession());
    }
     /**
     *  销毁
     */
     public void  sessionDestroyed(HttpSessionEvent sessionEvent) {
        session_map .remove(sessionEvent.getSession());
    }
     /**
     *  获得 session
     *  @param  session_id
     *  @return
     */
     public static  HttpSession getSessionById(String session_id){
        return session_map .get(session_id);
    }
     /**
     *  移除 session
     *  @param  session_id
     */
     public static void  removeSessionById(String session_id){
        session_map .remove(session_id);
    }
}
 
 3、接下来,创建一个可以操作Cookie的类
package  com.pf.org;
import  java.util.HashMap;
import  java.util.Map;
import  javax.servlet.http.Cookie;
import  javax.servlet.http.HttpServletRequest;
import  javax.servlet.http.HttpServletResponse;
/**
* Web 工具类 ( 用于操作 Cookie)
*  @author  PF
*
*/
public class  WebUtil {
     /**
     *  添加 Cookie
     *
     *  @param  response
     *  @param  name
     *            Cookie 的名字
     *  @param  value
     *            Cookie 的值
     *  @param  maxAge
     *            Cookie 的存活时间
     */
     public static void  addCookie(HttpServletResponse response, String name,
           String value,  int  maxAge) {
       Cookie cookie =  new  Cookie(name, value);
        if  (maxAge > 0)
           cookie.setMaxAge(maxAge);
        //  添加到客户端
       response.addCookie(cookie);
    }
     /**
     *  取出硬盘中所有的 Cookie
     *
     *  @param  request
     *  @return
     */    www.2cto.com
    public static  Map<String, Cookie> getAllCookies(HttpServletRequest request) {
       Map<String, Cookie> cookie_map =  new  HashMap<String, Cookie>();
       Cookie[] cookies = request.getCookies();
        // 如果存在 cookie, 就存入 Map
        if (cookies!= null ){
            for  ( int  i = 0; i < cookies. length ; i++) {
              cookie_map.put(cookies.getName(), cookies);
           }
       }
        return  cookie_map;
    }
/**
     *  在 Cookie 中通过 Cookie 名称获得Session中的 SessionId
     *  @param  request
     *  @param  name
     *  @return
     */
     public static  String getSessionIdByNameInCookie(HttpServletRequest request,String name){
       Map<String, Cookie> cookie_map=getAllCookies (request);
        if (cookie_map.containsKey(name)){
           Cookie cookie = cookie_map.get(name);
            return  cookie.getValue();
       }
        return null ;
    }
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
购物车案例: 基本设计思想: (1)使用session机制,保存用户状态(用户购买的商品)。 (2)为了方便对购买操作的处理(比如,购买商品、 删除已经购买的商品、查看已经购买的商品、计价等等), 设计一个Cart类,封装这些操作。Cart对象会放在Session对象里。 具体的设计: 表:t_computer create table t_computer( id bigint primary key auto_increment, name varchar(50), description varchar(100), pic varchar(255), price double(8,2)); 实体类: Computer dao: ComputerDAO Comuter findById(long id) List findAll() save(Computer computer); ComputerDAOJdbcImpl 测试dao: 购物车的设计: CartItem //商品条目 属性: int qty //购买产品的数量 Computer c //购买的产品是什么 方法: get/set方法 Cart //购物车 属性: List items //存放所有购买的商品 方法: boolean add(CartItem item) //boolean值如果是false,表示 已经购买过该商品。 void delete(long id) //删除某个商品。id是产品的ID号。 void modify(long id,int qty) //修改商品的数量 double sum() //计价 void clear() //清空商品 List list //列出所有商品 页面: cart_list.jsp: 功能:列出所有商品,用户点击链接实现购买。 实现:查询t_computer表(由ShoppingServlet来负责查询) cart.jsp 功能:列出所有已经购买的商品,并且可以修改数量、 删除某个商品、清空购物车、返回到cart_list.jsp。 实现:(ShoppingServlet调用以下方法) 列出所有已经购买的商品: cart.list() 修改数量:cart.modify() 删除:cart.delete() 清空:cart.clear() ShoppingServlet: (1)创建Session: request.getSession(); (2)创建Cart,并且将Cart放到session (3)调用Cart的方法,完成请求;也会调用 ComputerDAO完成数据库操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值