开发购物车模块中遇到的问题

无法添加商品

  • 需求:点击商品详细页面中的“我要购买”按钮,servlet获得请求,根据session中的uid和hidden的book id来搜索数据库,若找到记录,那么在原有的记录上添加商品数量;否则新增条目。

  • 问题:商品没有添加,数量也没有增加

  • 原因:问题出在Dao中的toCartItem(Map map)方法,我没有判断map是否为空就直接使用mapToBean方法来封装数据;没有考虑到如果查询结果为null,调用这个方法仍然会返回一个尽管内容为空,但是却不等于null的实体对象;这就导致在service层中总是判断购物车中已经有了相应商品,然而因为bid和uid都为空,所以数量也没有增加的情况。

  • 解决方法:在toCartItem中添加一条if语句判断map是否为null,若是则直接return null;

  • 评价:很有意义的一次犯错。

执行sql报错,提示data too long for column…

  • 情景:id列无法插入数据

  • 原因: 调用UUID.randomUUID().toString()方法时,生成的字符串中含有’-‘字符,这样就超出了32个字符。而id列定义为varchar(32)

  • 解决办法: UUID.randomUUID().toString().replace(“-“, “”)

session中遇到的奇怪问题

  • 情景:需要通过session中保存的user来访问购物车信息。

  • 问题:运行的时候控制台拼命地在打印NullPointerException,明显user.getUid()这一行出了问题;难道session中没有user对象?然而奇怪的是,jsp页面中的EL表达式${user.loginname}能够正常显示。
    如果这一点还能用页面缓存来解释的话,那么更离奇的事情还在后面:我尝试往购物车里面添加商品,然后再点击“我的购物车”来查询购物车中的信息,结果却是正确的?!这是显然不可能嘛,如果没有获取用户id,那么数据库也就无法查询到更新后的购物车信息,然而控制台却明明白白地显示user为空?

  • 进展:我不甘心,怀疑是浏览器的问题,前几天在firefox中下载了一个developer插件,会不会和这个有关?比如自动删除sessionId什么的?于是我换了IE,再点击购物车,控制台里面的白底黑字简直舒爽~

  • 然而:十几秒过后,刺眼的红字:NullPointerException!搞毛啊!

  • 猜想:这个问题似乎是定时发生的,总之很有规律,然后我联想到很久以前我似乎作死写了一个session扫描器,每过30s摧毁所有的session……会不会和这个有关?不会吧,这明明是另一个项目里的,难道这个扫描器摧毁的是服务器里面所有的session?!

  • 于是:我写了一个SessionListener,准备看看session的lifecircle;当刷新了几遍浏览器之后,控制台居然没有显示session被创建的信息的时候,我的内心是崩溃的。

  • 事实证明:我太慌了,忘记session只有在重启浏览器之后才会被重新创建,这次OK了,一切正常,等了十几分钟玩了会儿黑魂session也没有丢失,很好——个屁啊!照样是NullPointerException!

  • 蓦然回首:正愁眉苦脸地看着eclipse,看着控制台自动打印的项目自动重新发布的信息,我忽然就精了…….服务器里面还有一个会自动发生的事件,那就是项目自动重新发布!拿 ‘Session摧毁+自动发布’ 做关键词一查,果然!!!果然啊,真的是这个原因,因为我的user没有序列化!我靠,没有序列化才会导致明明user都已经为null,而user.getId居然还能正常显示这种奇妙的事情发生。

+解决方法: 为User实现Serializable接口,一切恢复正常,处女座的欲望得到了满足。

  • 感想:编程真的是太TM有趣了。

。。。。。。

  • 然而等等:事情好像并没有结束——eclipse在没有修改后台代码的时候也会自动重新发布吗……..会吗?

你可能感兴趣的:(错误汇总)