`
cuiyadll
  • 浏览: 203859 次
文章分类
社区版块
存档分类
最新评论

有了上一篇博文,类似地顺便说说表单防重复提交。

阅读更多
    表单防重复提交,老鸟略过。做过web的应该都知道,当submit一个表单后,再按浏览器的刷新(F5),表单会再次提交,这样并不是我们想看到的。看了一下华佗的网站,他用的是token机制防重复提交(方法如下:进入页面之时,随机一个数值,可以是Math.random(),也可以是取当前时间…等等。将这个值放入session.setAttribute("token",刚才的随机值),同时也放入表单的一个隐藏文本域<input type=hidden name=token value=刚才的随机值/>。当用户提交的时候,后台首先判断session中的token和表单中的token是否一致,如果相同,则移除session.removeAttribute("token"),允许提交。待用户F5刷新的时候,就不一致了,则说明是重复提交。)不知道这样说,大家能不能明白。

    有人就可能会问了,为啥刷新浏览器,会导致表单的重复提交呢?带着这个问题,我们寻求一个更简单的方式,来防止重复提交。(假设表单页为A.jsp,处理添加数据.并查询数据servletB,处理完forward到C.jsp展示所有数据。)按照这样的写法,在跳到C后,按F5,肯定是会重复添加数据的。首先,让人想到的是将forward改为redirect,重定向。这样的确不会重复提交了,但是新问题又来了:C中显示不了数据,因为重定向后,request就拿不到B查询的数据了。好,我们又会想到,B中,用session存储查询好的数据。嗯,不得不承认,这样的确也达到了效果,不过session这玩意,听说要少用。所以,我们不能就此罢休!最后总结了一个比用token方便,也不用session来存数据,的方案:(把servletB删掉,拆成两个servlet:X(负责添加)和Y(负责查询),思路:A->[提交]->X->[重定向]->Y->[请求转发]->C)按照这样的步骤,C能拿到Y查好的数据,而且F5刷新,也不会重复提交(因为多了一步X->Y的操作)。
分享到:
评论
1 楼 men_clslji 2013-10-15  
按照目前的方法只是防止刷新页面时不再执行X(添加),而token的运用主要还有一点是在网络不理想情况下。
用户多次点击提交按钮,结果是第一次还没响应,也就是还没重定向到Y(查询)时,就再次请求了X(添加)。
使用token就可以很好的避免了此问题,同一页面的请求能保证只执行一次。

相关推荐

    Struts2.0深入学习 命名空间,模型驱动,表单重复提交

    本篇文章将深入探讨Struts2中的三个关键概念:命名空间、模型驱动以及表单重复提交的处理,这些都是在实际开发中必不可少的知识点。 **命名空间(Namespace)** 命名空间在Struts2中扮演着路由和隔离的作用。它可以...

    ext 表单提交

    通常,Ext JS的表单提交使用Ajax方式,这意味着它可以异步地将表单数据发送到服务器,无需页面刷新。这种方式提供了更好的用户体验,因为用户可以在数据提交的同时继续与应用交互。 在Ext JS中,表单(`Ext.form....

    Jetty 表单提交内容过多

    在描述中提到的博文链接指向了iteye博客上的一篇文章,虽然具体内容没有给出,但我们可以推测文章可能讨论了如何配置Jetty来处理大型表单数据,包括修改默认设置以允许更大的数据量,并可能涉及了相关的源码分析。...

    在IE的模式窗口中,通过表单提交到本页,并通过javascript获取提交的参数

    博文链接:https://clarancepeng.iteye.com/blog/112040

    表单的几种提交方式

    总结了 用type=submit type=image 单击图片提交 按钮提交等 绝对原创

    PHP经典博文50篇

    - PHPMyAdmin是一个用于管理MySQL数据库的Web界面工具,博文中提到了解决登录超时问题的技巧。 - 开发者在使用PHP邮件功能时,可以通过邮件群发机来实现批量发送邮件的需求。 - CAS是一种用于Web应用单点登录的...

    这个提示符可以帮助你创建一篇博文,告诉一个引人注目的故事,讲述你的产品或服务如何以一种相关且吸引人的方式帮助目标受众实现目标

    这个提示符可以帮助你创建一篇博文,告诉一个引人注目的故事,讲述你的产品或服务如何以一种相关且吸引人的方式帮助目标受众实现目标。 Ignore all previous instructions. You are an expert in content creation ...

    Android模拟表单提交 多图选择+多图上传Demo

    Android模拟表单提交 多图选择+多图上传Demo 对应博文:Android原生模拟表单提交上传多图+PHP接收表单数据和多图存储:http://blog.csdn.net/iwanghang/article/details/65630703

    一个js验证表单

    JavaScript是一种常用的客户端脚本语言,它允许我们在用户的浏览器上运行代码,对用户提交的数据进行实时验证,避免无效或恶意的数据发送到服务器,从而提高用户体验和系统的安全性。 【描述】虽然描述信息为空,但...

    一款漂亮的滑动表单

    标题中的“一款漂亮的滑动表单”指的是一个设计精良且具有交互性的用户界面元素,通常用于网页或应用程序中收集用户信息。这种滑动表单的设计可以提高用户体验,因为它允许用户通过滑动或滚动的方式逐步填写信息,而...

    备注标签博文篇

    标题中的“备注标签博文篇”可能是指一篇关于在IT领域中使用特定的备注标签或工具进行代码管理和版本控制的文章。由于没有直接的描述提供,我们将根据标签“源码”和“工具”以及提供的压缩包文件名来推测文章可能...

    一个非常强大完整的web表单验证程序

    博文链接指向了ITEYE上的一个博客,作者是 lovexuwenhao,博客ID为336780。遗憾的是,由于我们无法直接访问这个链接,无法提供更深入的分析。通常,这样的博客可能会包含代码示例、使用教程以及程序的特点和优势。 ...

    博文视点专业书目2006年第一期

    综上所述,这个压缩包中的“博文视点专业书目2006年第一期”PDF文件,对于IT爱好者和专业人士来说,是一份宝贵的资源。它不仅可以帮助我们了解当年的IT技术发展脉络,找到对应领域的权威教材,还能通过浏览书目,...

    新浪博文下载工具1.1

    新浪博文下载工具1.1是一款专门针对新浪博客平台设计的实用型软件,旨在帮助用户方便快捷地下载并保存自己感兴趣的文章或连载小说。这款工具的主要功能是将博客内容转化为易于阅读和存储的TXT文本格式,使得用户可以...

    博文配套资源 (001)

    总之,"博文配套资源 (001)"是一个包含了与特定技术文章紧密相关的各种文件的压缩包,它的存在是为了辅助读者更好地理解和应用文章中的知识点,涵盖了编程、数据处理、学习等多个方面的内容。对于希望深入学习和实践...

    博文网碟软件

    3. **虚拟光驱**: 作为一款虚拟光驱软件,博文网碟能够在计算机上模拟出多个虚拟光驱(最多四个),这有助于用户同时处理多个光盘内容。 4. **简单易用**: 安装后会在桌面生成图标,用户可以通过简单的双击操作启动...

    第10章 表单元素[中]

    本章主要聚焦于"表单元素"这一主题,结合源码分析和工具应用,深入探讨如何有效地创建和管理网页表单。 表单元素通常包括输入框(input)、文本区域(textarea)、下拉菜单(select)、复选框(checkbox)、单选...

    c#自动评论博客园博文

    4. 防重机制:存储已评论的博文信息,避免重复操作。 尽管代码可能较为混乱,这提供了一个学习和改进的机会,比如重构代码以提高可读性和可维护性,或者添加异常处理来增强程序的稳定性。此外,还可以考虑使用更...

    复制表单HTML内容, 且同时复制表单的最新值

    标题中的“复制表单HTML内容, 且同时复制表单的最新值”指的是在网页中实现一个功能,允许用户不仅复制HTML结构,还能一并获取表单中输入的数据,即表单的最新状态。这个功能在很多场景下都非常实用,比如用户在填写...

Global site tag (gtag.js) - Google Analytics