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

虾米姐 阅读:621 2021-03-31 23:30:23 评论:0


今天学习到了另外一种购物车的实现.和.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.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号