java購物車的實現 中實現基於Session和Cookie的購物車

今天學習到了另一種購物車的實現.和.net中的實現思路有些差別.在此作個總結 

一、首先抽象出"購物車",由商品、購物車中的項、購物車三部分組成.
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();
    }
}

二、購物車抽象出來了,就要建立一個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);
    }
}
 
 三、接下來,建立一個能夠操做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
     */
    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 ;
    }
}