• 35648

    文章

  • 23

    评论

  • 20

    友链

  • 最近新加了很多技术文章,大家多来逛逛吧~~~~
  • 喜欢这个网站的朋友可以加一下QQ群,我们一起交流技术。

刷新页面重复提交问题的解决,及其衍生的思考 原

欢迎来到阿八个人博客网站。本 阿八个人博客 网站提供最新的站长新闻,各种互联网资讯。 喜欢本站的朋友可以收藏本站,或者加QQ:我们大家一起来交流技术! URL链接:https://www.abboke.com/jsh/2019/0627/4087.html

>>>

背景及简单的介绍

由于没有截图保存下来,所以这篇博客可能有点不生动,这是几天后进行回顾时写的记录,主要记录这次问题解决的过程,及一些漫谈思考

问题描述

写一个javaweb的网上商城,在购物车里对商品的数量增加一个,数据到数据库后,又返回了这个页面,形成了数据由页面到后端又返回此页面显示商品数量的一个回路。<br> 暂且不提购物车里的数据在此时是否应该直接拿到数据库,还是一次次数量加一后,再一起拿到数据库,因为都会在刷新此页面的时候重复提交数据到后端,因此这个问题成了一个致命的bug,急需处理

处理过程

使用的环境

MVC三层开发,即模型、视图、控制器三层<br> 页面视图层是jsp写的,然后传到servlet(控制层),servlet调用模型层的类写入数据库

首先,空指针

在这之前,是由于遇到了几个空指针的bug要处理,然后才引入了这次重复提交数据的问题的解决。

接着,还原案发现场

解决了空指针后,发现原来这个数据由页面前端到后端再回来的这个回路里,有几个入口和出口,然后才是这个回路。<br> 进入查看我的购物车界面之前要通过控制层的servlet调用,然后将查出来的数据库的数据返回给页面<br>

进入这个servlet的入口有两个:

入口1、在商品详情页面将商品加入购物车后,直接跳转到servlet,此时没有点击购物车里的商品数量加一件按钮,加一件的这个操作的数据没有传入servlet<br> 入口2、在购物车页面点击商品数量加一按钮增加一件商品时,也是进入的这个servlet,其实这个可以进专门处理将数量加一的过程的servlet,但是还是要返到查看我的购物车的上面那个servlet<br>

从这个servlet出来的时候,带着加一件后的数据来的

出口1、出servlet后返到查看我的购物车界面<br> 出口2、跳转到别的相应的功能servlet或界面

处理

分清了入口和出口,就好操作了,从入口2进servlet时会带进点击加一件按钮这个操作的操作值,而入口1没有,那就在servlet里接收这个操作值,并给一个初始值空,为空则是入口1,有操作值则是入口2,入口2进来后出servlet时要将这个操作值再次初始化为空,然后到购物车页面后,将加一件按钮的属性值写成空(即接收出servlet被初始化空的操作值),这样就表示是入口2进入servlet加一件到数据库后,出servlet时又查看我的购物车页面上的加一件按钮的属性改成没有使用过了(即空值),这样刷新页面就不会再提交数据到servlet进而加到数据库了,除非你又点击了加一件按钮,这时按钮的属性值由空变为非空的值,传到servlet,出servlet时又被servlet初始化为空传到页面按钮的属性里,就结束了这一次加一件这个操作,而刷新不会提交了

结束及总结

到此问题就解决了,我觉得这样解决时数据在回路中的传递效率还挺高。<br> 其实还有好多展开的思路及后续的拓展,那就先未完待续吧。。。有时间了再来补上

相关文章

暂住......别动,不想说点什么吗?
  • 全部评论(0
    还没有评论,快来抢沙发吧!