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