首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

购物车模块兑现之多个浏览器之间的共享技术

2012-12-25 
购物车模块实现之多个浏览器之间的共享技术1.预备知识及注意点:Session的基本知识:http://welision.iteye.

购物车模块实现之多个浏览器之间的共享技术
1.预备知识及注意点:Session的基本知识:http://welision.iteye.com/blog/883910;Cookie的基本知识及应用:http://welision.iteye.com/blog/890304 el表达式的基本应用:http://welision.iteye.com/blog/882703?(注:el表达式显示某个类中某个属性时,该类必须提供该属性的get方法)2.共享技术的实现方法一a)监听类配置首先创建监听类CartSessionListen,并定义一个静态Map变量sessions用于存放在被创建的session及其对应的sessionID;在web.xml中配置监听类。

public class CartSessionListen implements HttpSessionListener {private static Map<String, HttpSession> sessions = new HashMap<String, HttpSession>();public void sessionCreated(HttpSessionEvent sessionEvent) {sessions.put(sessionEvent.getSession().getId(), sessionEvent.getSession());//System.out.println("session被创建");}public void sessionDestroyed(HttpSessionEvent sessionEvent) {sessions.remove(sessionEvent.getSession().getId());//System.out.println("session被销毁");}public static HttpSession getSession(String sessionID) {return sessions.get(sessionID);}public static void remove(String sessionid){sessions.remove(sessionid);}}

?

<listener><listener-class>com.myshop.web.action.shopping.CartSessionListen</listener-class></listener>

?

b)Action中的逻辑处理在action中,首先获取当前session,并从中获取购物车对象buyCart;若无法获取buyCart,则先从cookie中获取sessionID。若存在sessionID,则从监听类CartSessionListen的静态Map变量sessions中通过该sessionID查找session。若session被获取到,则从该session中获取buyCart,并从静态Map变量sessions中移除该session;(注:后面将会将获取到的buyCart加入到当前session中,而当前session在被创建时已经被加入到sessions中,下次查找的session将会是现在的当前session,而原来的session以后不会再用到,故而需将其中sessions中移除) 如果此时还没获取到buyCart,说明以往session中并没有创建过buyCart,所以创建新的购物车对象buyCart;将buyCart加入到当前session中;最后将当前sessionID加入cookie中,即加入name为字符串"sessionID"且value为当前sessionID的cookie。
BuyCart buyCart = (BuyCart)request.getSession().getAttribute("buyCart");if(buyCart==null){String sessionID = WebUtil.getCookieByName(request, "sessionID");if(sessionID!=null){HttpSession session = CartSessionListen.getSession(sessionID);if(session!=null){buyCart = (BuyCart)session.getAttribute("buyCart");if(buyCart!=null)CartSessionListen.remove(sessionID);}}}if(buyCart==null){buyCart = new BuyCart();}request.getSession().setAttribute("buyCart", buyCart);WebUtil.addCookie(response, "sessionID", request.getSession().getId(), request.getSession().getMaxInactiveInterval());

?

3.共享技术的实现方法二根据在该文http://welision.iteye.com/blog/883910中讲述的默认情况下session与cookie的情形,可将服务器写入到客户端用于存放sessionID的cookie存放时间设置成和session在服务器的存放时间一样。
BuyCart buyCart = (BuyCart)request.getSession().getAttribute("buyCart");if(buyCart==null){ buyCart = new BuyCart(); request.getSession().setAttribute("buyCart", buyCart); }WebUtil.addCookie(response, "JSESSIONID",request.getSession().getId(), request.getSession().getMaxInactiveInterval());

?

热点排行