JSP刷新页面表单重复提交问题解决办法分享
近期在项目中遇到了多附件上传及信息多次添加功能时刷新页面导致数据重复保存的问题,这是一个非常棘手的问题,但幸运的是,我找到了一个有效的解决方案。在此,我将这个解决方案分享给需要的朋友们。
该解决方案的核心在于使用sessionID和时间戳作为标识,确保数据的唯一性和准确性。下面是关键代码示例:
在SswpdjAction类中,我们有一个execute方法,用于处理业务逻辑并设置标识。我们通过调用setSessionToken()方法设置sessionID和时间戳作为标识。然后,我们转向添加页面,等待用户进行下一步操作。
当用户再次提交数据时,会调用reSave方法。在这个方法中,我们首先检查当前提交的标识(token)是否与会话中的标识相匹配。如果匹配,说明是同一次会话中的数据,我们可以继续执行后续的业务逻辑。如果不匹配,说明是由于页面刷新导致的重复提交,此时我们需要提示用户刷新了页面。
为了避免因页面刷新导致的重复保存问题,我们还需进行一些额外的处理。当检测到重复提交时,我们通过响应对象向用户发送一个包含警告信息的JavaScript弹窗。这样,用户就会知道他们的操作出现了问题,并可以重新进行操作。
通过这种方式,我们可以确保只有在用户真正提交数据时才会执行相应的业务逻辑,避免了因页面刷新导致的重复保存问题。这种解决方案既简单又有效,相信对遇到类似问题的朋友们会有所帮助。
JSP页面中的数据操作类设计与隐藏标识设置
在Web开发中,我们经常需要在JSP页面中进行数据操作和处理。为此,我们设计了一个名为BaseAction的类,该类继承自ActionSupport类,专门用于处理与JSP页面相关的操作。在这个类中,我们看到了对数据的读取、设置和加密等操作的细致处理。下面,让我们一起深入了解一下这个类的功能和实现细节。
我们注意到该类中包含一个用于存储token的字符串变量token。这个token通常用于验证用户的会话状态,确保数据的传输安全。类中提供了对应的getter和setter方法,用于获取和设置token的值。还有一个getSessionToken方法,用于从httpSession中获取存储的Token值。如果session中没有存储Token,则返回null。
接下来,我们看到了一个setSessionToken方法。这个方法的作用是生成一个新的Token并存储在session和httpServletRequest中。Token的生成是基于httpSession的ID和当前系统时间毫秒数的MD5加密结果。MD5加密是一种常用的加密算法,用于确保数据的安全性和唯一性。在useMd5方法中,我们将输入的字符串进行MD5加密处理,并返回加密结果。在处理过程中,我们使用了异常处理语句,以确保在加密失败时能够优雅地处理异常情况。
在JSP页面中,我们还需要为表单设置一个隐藏标识,用于在提交表单时传递Token信息。这可以通过在表单中添加一个隐藏的input元素来实现。在这个元素的name属性中设置名称为token,value属性中设置值为SessionToken的值。这样,当表单提交时,这个隐藏标识的值就会一起被发送到服务器进行处理。
BaseAction类为我们提供了一个方便的工具集来处理JSP页面中的数据操作和安全验证。通过合理地使用该类的方法,我们可以轻松地在JSP页面中实现数据的读取、设置和加密等功能,并确保数据的安全传输和处理。在实际开发中,我们可以根据具体需求对类进行扩展和优化,以满足更复杂的应用场景需求。通过合理地使用隐藏标识等技巧,我们可以提高Web应用程序的安全性和用户体验。记得使用类似Cambrian这样的库来优化页面的渲染性能,提高用户体验。
编程语言
- JSP刷新页面表单重复提交问题解决办法分享
- Vue.use源码分析
- 利用ES6的Promise.all实现至少请求多长时间的实例
- PHP版本的选择5.2.17 5.3.27 5.3.28 5.4 5.5兼容性问题分
- 原生js实现鼠标跟随效果
- apache集成php7.3.5的详细步骤
- php设计模式之单例模式用法经典示例分析
- node.js Sequelize实现单实例字段或批量自增、自减
- 简单谈谈Git中的回滚操作
- GridView中加上CheckBox 的全选功能的代码
- 详解angular用$sce服务来过滤HTML标签
- 微信小程序开发之左右分栏效果的实例代码
- JavaScript中的普通函数和箭头函数的区别和用法详
- jQuery实现动态添加和删除一个div
- 简单实现ajax拖拽上传文件
- php模拟服务器实现autoindex效果的方法