`
1028826685
  • 浏览: 941899 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类

j2ee 开发中防止表单重复提交

    博客分类:
  • Web
阅读更多

   今天对j2ee web开发中怎样防止对表单的重复提交作一下总结:

第一:可以在客户端利用Javascript对表单重复提交作验证,主要实现手段是在这个表单触发表单提交事件的时候调用一个Javascript编写的函数,这个函数:

<script>

var isCommitted = false;

function checkPost()

{

if(!isCommitted)

{

isCommitted = true;

return true;

}

else

{

alert("不能重复提交表单");

return false;

}

}

</script>

<form action="servlet/RepeateFormServlet" method="POST" onsubmit="return checkPost()">...


第二种:利用验证码
  由于每次表单的提交都需要一个验证码这个验证码在服务器端是唯一的每次表单提交的验证码是不同的可以根据每次提交上来的验证码与服务器端的中的session中的验证码进行匹配

第三种:利用一个时间令牌(可以使任意的令牌只要是唯一的就可以)

产生这个唯一令牌

如:<%
      Date   nowDate =    new Date();
      String nowDateString  = new  Long(nowDate.getTime()).toString();
      session.setAttribute("tokenTime",nowDateString);
%>
 
通过一个表单隐藏的字段传递这个令牌

<input type="hidden"  name="tokenTime" value="<%=nowDateString%>">

接下来在服务器端中的session中获取这个时间令牌然后与这个表单的隐藏字段进行比较
相同则提交表单并且把这个session中的tokenTime删除
session.setAttribute("tokenTime",nowDateString);
反之....


第四种:基于Struct框架的解决方案

在Struct框架中提供一个Token机制来解决表单的重复提交

使用这个Token应注意:

  这个JSP必须是通过一个Action进行转发并且在这个Action中调用saveToke(request);
  这个方法向导向的JSP中保持一个唯一的Token

然后在一个处理表单的Action中调用isTokenVaild(request,true)方法来验证这个表单是否被重复提交

实现原理:当调用saveToken(request)时候服务器向JSP中输出一个唯一的Token服务器端也保存相同的一份当提交这个表单的时候调用isTokenValid(request,ture)进行校验后服务器又会生出一个新的Token发送给表单JSP中服务器端的Token不发送改变,当客户端再次提交这个表单的时候调用isTokenValid(request,ture)方法进行校验此时这个Token不一致则不会重复提交表单啦......
 

多指教......


分享到:
评论

相关推荐

    J2EE框架-重复提交、重复刷新、防止后退的问题以及处理方式

    在J2EE框架中,开发过程中常常会遇到一些与用户交互相关的技术问题,如重复提交、重复刷新以及防止用户后退导致的数据不一致。这些问题在实际应用中可能会对系统的稳定性和数据完整性造成影响,因此需要采取相应的...

    J2EE界面开发规范.pdf

    规范的目的是为了统一开发标准,减少错误和不一致性,适用于J2EE开发人员、美工、产品经理、开发经理以及质管人员。在项目启动阶段,所有相关人员需熟悉此规范,确保在需求分析、详细设计和编码过程中遵循。 **2. ...

    解决重复提交、上传组件

    在开发Web应用时,用户可能会由于网络延迟或其他原因导致同一操作(如表单提交或文件上传)被意外多次触发,这通常称为重复提交或重复上传问题。为避免这种情况,我们需要采取措施来确保数据的一致性和完整性。本篇...

    网上投票系统(j2ee开发) 毕业论文设计

    在实际开发过程中,数据库管理也至关重要。虽然未提供数据库文件的详细信息,但"vote.mdb"可能是一个Access数据库文件,用于存储投票项目、选项、用户信息以及投票记录等相关数据。Access数据库在小型项目中常用,...

    J2EE中的struts2表单细节处理

    在上述示例中,`&lt;s:form&gt;`标签用于定义表单,`&lt;s:textfield&gt;`用于创建输入字段,而`&lt;s:token&gt;`用于防止表单重复提交。 2. **ModelDriven模式**: `ModelDriven`接口使得Action类可以直接与业务对象(BO,Business ...

    J2EE企业级项目开发-1期 任务1-8 实训项目单(一).doc

    3. **使用Token防止表单重复提交**: 表单重复提交可能导致数据不一致,尤其是在并发环境中。Token机制是一种常见的解决方案。学生需要在服务端生成一个唯一的Token,并将其存储在会话或Cookie中,同时将Token发送...

    J2EE企业级项目开发-1期 任务1-8 实训项目单(二).doc

    3. **Token防止表单重复提交**:为避免用户因误操作导致的重复数据提交,可以采用Token机制。在用户提交表单时生成一个唯一的Token值,将其存储在服务器端(如Session)和客户端(如隐藏字段)。再次提交时,服务器...

    J2EE复习资料

    - **通过request对象**:Servlet可以通过`HttpServletRequest`对象获取客户端发送的数据,如表单提交的信息。 - **通过response对象**:Servlet可以通过`HttpServletResponse`对象向客户端发送响应,包括HTML、JSON...

    JEECG代码生成器[J2EE Code Generation]

    JEECG代码生成器是一款针对J2EE开发者的高效开发工具,旨在通过自动化的方式解决传统手工编码中的重复性劳动问题,提升开发效率与代码质量。它能够有效整合并管理各个孤立的信息系统,形成统一的技术栈与开发规范,...

    Java Web高级编程任务书.pdf

    4. **Token防止重复提交**:为了防止用户意外或恶意的重复提交,项目中使用了Token拦截器。每个请求会生成一个唯一的Token,如果同一请求再次提交,系统会检查Token的有效性,从而避免重复操作。 5. **页面设计与...

    jsp编写的用户登录案例

    【JSP编写的用户登录案例】是一个典型的Web开发实践,主要使用Java Server Pages(JSP)技术,结合J2EE平台,实现与数据库交互的用户登录功能,并且具备分页展示的效果。在这个案例中,我们可以深入理解JSP的核心...

    struts+ajax实例

    在J2EE开发中,Struts2框架和AJAX技术的结合使用能够提供更优秀的用户体验,特别是在处理表单验证和实时交互方面。本实例主要讲解如何在Struts2中集成AJAX,实现注册用户的即时用户名可用性检查。这个功能对于防止...

    WebWork深入浅出.doc

    10. 其他功能:支持异步调用、国际化、文件上传和防止重复提交等。 WebWork通过其丰富的特性和强大的功能,解决了Web层开发中的诸多挑战,提高了开发效率和应用质量。对于开发者来说,理解并掌握WebWork的原理和...

    WebWork深入浅出

    10. **其他功能**:WebWork支持异步调用、国际化、文件上传和防止重复提交等功能。 **WebWork简介** WebWork的核心组成部分包括Xwork和WebWork2。Xwork提供拦截器、表单验证、类型转换、OGNL表达式语言和IoC容器等...

    struts2学习笔记.doc

    #### 七、表单重复提交 **7.1 问题分析** - **原因分析**:用户可能由于网络延迟等原因导致多次点击提交按钮,造成数据重复。 - **解决方案**: - 使用Token机制防止重复提交。 - 在`struts.xml`中配置Token拦截器...

    Struts关于登陆

    Struts是Java Web开发中的一款经典MVC框架,主要用于构建基于J2EE的企业级应用程序。在Struts框架中,处理用户登录是一个常见的需求。本文将深入探讨Struts如何实现登录功能,涉及的主要知识点包括Action、Form Bean...

    webwork深入浅出

    10. **其他问题**:包括异步调用、国际化支持、文件上传、防止重复提交等。 #### 四、WebWork如何应对挑战 1. **数据输入**:WebWork通过其强大的表单验证机制和OGNL表达式语言实现对请求参数的解析与绑定,从而...

    JSP中的在线人数统计

    在实际应用中,还需要考虑更多细节,比如防止重复登录、优化用户体验等。此外,为了提高系统的可扩展性和性能,还可以考虑使用缓存技术或其他分布式解决方案来替代或增强现有的基于`HttpSession`的方案。

    java 面试题(集锦)

    - **表单验证**:确保用户提交的数据符合预期格式。 - **SSL**:提供加密通信,保护数据传输安全。 #### 2. MVC模式 - **Model-View-Controller**:将数据模型、用户界面和控制逻辑分离,提高模块间解耦。 #### 3...

    java面试题题库详解

    - **表单提交:** 如何通过 GET 和 POST 方式提交表单数据。 #### 36. errorPage 属性与应用范围 **知识点概述:** - **errorPage:** 指定错误页面,用于处理特定错误码。 - **异常处理:** 如何配置异常处理页面...

Global site tag (gtag.js) - Google Analytics