您现在的位置是:百科 >>正文
jsp实现购物车思路
百科46人已围观
简介购物车这玩意儿,说穿了就是个临时存东西的地儿。用户在页面上点“加入购物车”,后端得把商品ID、数量、单价这些信息记下来。JSP里最常用的办法就是塞进Session——毕竟Session天生就是跟着用户 ...
购物车这玩意儿,实思路说穿了就是现购个临时存东西的地儿。用户在页面上点“加入购物车”,物车后端得把商品ID、实思路数量、现购单价这些信息记下来。物车JSP里最常用的实思路办法就是塞进Session——毕竟Session天生就是跟着用户走的,关了浏览器再打开,现购购物车还在不在?物车那得看会话超时时间设了多久。 我见过不少人一上来就写死代码,实思路把购物车数据直接扔到数据库里。现购逻辑没错,物车但高频操作下数据库压力大得吓人。实思路用户加一件商品就写一次库?现购那电商大促时数据库早炸了。更合理的物车做法是:Session里放一个HashMap,key是商品ID,value是数量。用户每次点击,后端就更新这个Map,等用户最终结算时再一次性写入订单表。这思路简单粗暴,但确实扛得住高并发。 具体实现上,JSP页面里嵌个JavaBean,比如叫CartBean,里面放个Map属性。加购的Servlet拿到请求后,先判断Session里有没有CartBean,没有就new一个塞进去。然后取出Map,判断商品ID是否存在——存在就数量加一,不存在就put一个新条目。这逻辑用伪代码写出来就三五行,但坑在于多线程。多个用户同时操作各自的Session,理论上互不干扰,但如果你用了application级别的共享变量,那就要命了。我踩过这个坑,当时把购物车Map放在了application里,结果所有用户共享一个购物车,上线第一天就被人刷爆了。 还有个细节容易被忽略——价格。用户加入购物车时的价格和下单时的价格可能不一样。你Session里存了单价,但商品表的价格改了怎么办?要么在下单时重新查询数据库取最新价,要么在加购时就把价格快照存下来。大多数正规电商都选后者,因为用户看到购物车里的价格变了,体验极差。JSP里实现也不难,存一个Price字段就行,但记得要用BigDecimal而不是double,浮点数精度问题坑过多少程序员,不用我多说了吧。 前端交互上,JSP的表达式语言EL可以直接从Session里取出购物车Map,用c:forEach循环渲染表格。每行显示商品名、单价、数量、小计,再给个删除按钮,链接指向RemoveItemServlet,参数带上商品ID。这Servlet拿到ID后,从Session的CartBean里remove掉对应key,然后重定向回购物车页面。整个过程不需要刷新整页?那得用Ajax,但JSP传统做法就是整页刷新,虽然笨,但胜在简单可靠。 最后提一嘴Cookie方案。有人为了持久化购物车,把数据序列化进Cookie。但Cookie有4KB大小限制,放不了几个商品。而且用户清浏览器缓存就全没了。所以除非是匿名用户的临时购物车,否则别用这招。Session超时时间设长点,比如30分钟,对大多数场景够用了。 写购物车代码时,我习惯先画个流程图——用户点加购,Servlet处理,Session存取,页面展示。逻辑理顺了,代码写起来就是流水账。真正花时间的是异常处理,比如用户加了商品又删,删了又加,Session里Map的并发修改问题。用ConcurrentHashMap能避免一部分坑,但JSP里大多数人直接用的HashMap,那就在Servlet层加synchronized锁住CartBean的操作方法。丑是丑了点,但能用。
Tags:
上一篇:zabbix无法连接到数据库
下一篇:搜索渗透率
相关文章
工程师报名
百科工程师报名窗口开了三天,我盯着那个网页愣是没敢点下去。 页面上的表格比我想象中简单——姓名、单位、职称、项目经历,四行字,像四道门。真正卡住我的不是表格,是那个“项目经历”栏。我干了八年结构设计,参与 ...
【百科】
阅读更多网络营销成功案例分析其成功原因
百科江小白卖的不是酒,是情绪翻译机。2017年那波“表达瓶”刷屏,瓶身上印着“愿十年后我还给你倒酒,愿十年后我们还是老友”,年轻人拿着瓶子拍照发朋友圈,等于免费帮它做了一次社交裂变。核心逻辑很简单:产品本 ...
【百科】
阅读更多oracle监听日志满了
百科上周五凌晨,我被一通电话从被窝里拽了出来。客户那边ERP系统全线卡死,登录界面转圈转到天荒地老。远程上去一看,监听日志文件已经膨胀到12个GB,磁盘红线报警器响得跟消防车似的。 Oracle监听日志这 ...
【百科】
阅读更多