`
luojiy
  • 浏览: 53756 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

防止表单重复提交

阅读更多
jsp 页面:
  <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>
    <s:if test="null == web">
            新增页面
        </s:if>
        <s:else>
            更新页面
        </s:else>
    </title>
    <s:head theme="xhtml"/>
  </head>
   <body>
    <center>
     	<h3>
       <s:if test="null == web">
            新增页面
        </s:if>
        <s:else>
            更新页面
        </s:else>
        </h3>
    <s:form method="post" action="add">
     	<s:hidden name="web.id"  label="ID号"  theme="xhtml"/><br>
     	<s:textfield name="web.web" label="别名"  theme="xhtml"/><br>
     	<s:textfield name="web.webname" label="对应的网页"  theme="xhtml"/><br>
     	<tr><td></td><td align="center"><input name="cancle" type="button" onclick="javascript:history.go(-1)" value="返回" />
     	 <input type="submit" name="submit" value="提交" /></td></tr>
      
 <s:token />

     	</s:form>
    </center>
  </body>
</html>


只要在JSP页面中表单中放<s:token />这样的标签就行了。

struts.xml配置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
  <constant name="struts.i18n.encoding" value="utf-8" /> 
    <package name="test" extends="struts-default" >
 <interceptors>
  <interceptor-stack name="to">
   <interceptor-ref name="defaultStack"></interceptor-ref>
   <interceptor-ref name="token"></interceptor-ref>
  </interceptor-stack>
</interceptors>
<action name="add" class="action.TestAction" method="add">
            <result name="success">/success.jsp</result>
            <result name="error">error.jsp</result>
            <result name="invalid.token">/tokenerror.jsp</result>
            <interceptor-ref name="to"></interceptor-ref>
</action>
   </package>
</struts>

这样就可以实现防止表单重新提交
分享到:
评论
7 楼 shundetang 2008-10-09  
集群的重要工作就是, 保证几台服务器的SESSION一致.

以上的程序我想应该不会有问题的.


--------------> 理论上的解释, 有用过的, 请发表意见!
6 楼 killjim 2008-10-08  
taopian 写道
在服务器集群的场景下,这个方式就报废了。

还是要搭建Session服务器,才是正道。

F5.。
5 楼 toby941 2008-10-07  
token在现在多标签浏览的情况下已经不适用了
如果我先后开好几个一样的表单提交窗口,
再回到第一个表单,填写,提交,很无奈的会失败,而且一般用户对于失败的原因很费解
4 楼 superxielei 2008-10-07  
taopian 写道
这个东西跟Session有什么关系?

<s:token/>的原理就是在session总保存一个字符串。
仔细观察包含<s:token/>的页面会发现这些东西
<input type="hidden" name="struts.token.name" value="struts.token"/>
<input type="hidden" name="struts.token" value="BXPNNDG6BB11ZXHPI4E106CZ5K7VNMHR"/>
当页面提交的时候时候他会判断这个值是不是和session的一样,如果是一样的哪么OK,没问题你可以提交,并且会修改session里的值。哪么如果你刷新,那你页面上的值和session的值就不一样的,struts就不允许你提交数据了。就是这个原理。

taopian 写道
在服务器集群的场景下,这个方式就报废了。
还是要搭建Session服务器,才是正道。

为什么集群环境就不可能呢?集群环境保证session同步不止session服务器一个方法吧?采用session复制技术也可以保证session里的值在各个服务器都是相同的,这样做不可以吗?
对session服务器了解甚少,有什么问题大家指正。
3 楼 godson_2003 2008-10-06  
这个东西跟Session有什么关系?
2 楼 luojiy 2008-10-06  

taopian 写道

在服务器集群的场景下,这个方式就报废了。 还是要搭建Session服务器,才是正道。


是吗?
还没有搞过集群的场景,Session服务器的?未搞过哦。可否介绍一下。
1 楼 taopian 2008-10-06  
在服务器集群的场景下,这个方式就报废了。

还是要搭建Session服务器,才是正道。

相关推荐

    springboot2.1+redis+拦截器 防止表单重复提交

    在现代Web应用开发中,防止表单重复提交是一项重要的任务,因为这可能导致数据不一致性和服务器资源浪费。本文将深入探讨如何使用Spring Boot 2.1、Redis和拦截器来实现这一功能。以下是对这个主题的详细解释: ...

    javascript方式防止表单重复提交

    在Web开发中,表单重复提交是一个常见的问题,可能导致数据的冗余或错误。JavaScript作为客户端脚本语言,可以通过多种策略来防止用户意外或恶意地多次提交表单。以下是一些关键的知识点: 1. **禁用提交按钮**:最...

    防止表单重复提交(asp.net )

    为了确保用户在提交表单时不会无意或有意地多次发送请求,我们需要实施有效的防止表单重复提交的策略。以下是一些关键知识点: 1. **表单重复提交的类型**: - **用户行为**:用户可能意外按下刷新按钮,导致已...

    防止表单重复提交的方法(简单的token方式)

    防止表单重复提交的方法(简单的token方式),内附实现代码及实现思路。

    thinkphp3.2 防止表单重复提交

    在Web开发中,防止表单重复提交是一个重要的问题,它能确保用户操作的唯一性和数据的一致性。ThinkPHP 3.2 是一个基于MVC模式的PHP开发框架,提供了丰富的功能来帮助开发者构建安全、高效的应用。在这个场景中,我们...

    springboot+redis+AOP 防止表单重复提交

    AOP是面向切面编程,允许开发者定义“切面”,这些切面可以封装跨越多个对象的行为,如日志记录、事务管理或,就像在这个场景中,防止表单重复提交。AOP的核心概念是“切点”(Pointcut)和“通知”(Advice)。切点...

    浅谈利用Session防止表单重复提交

    浅谈利用Session防止表单重复提交 Session是Web应用程序中的一种机制,用于存储用户的会话信息。在Web应用程序中,表单重复提交是一个常见的问题,可能会导致数据库中产生冗余数据,浪费数据库资源。利用Session...

    自定义注解解决API接口幂等设计防止表单重复提交(生成token存放到redis中)

    为了解决这一问题,我们可以采用自定义注解结合Redis来实现一个防止表单重复提交的解决方案。 首先,让我们理解自定义注解的核心思想。注解是一种元数据,它提供了在代码中添加信息的方式,这些信息可以被编译器或...

    struts2防止表单重复提交--重定向

    下面将详细解释Struts2如何通过重定向来防止表单重复提交。 首先,理解表单重复提交的场景:用户在提交表单后,由于网络延迟或其他原因,可能会无意中多次点击提交按钮。如果服务器没有处理这些重复请求,那么相同...

    Struts2防止表单重复提交示例

    在Struts2中防止表单重复提交的过程主要包括以下几个步骤: 1. **生成Token**:当用户发起表单请求时,服务器会生成一个唯一的Token并将其存储在服务器的会话(Session)中,同时将这个Token作为隐藏字段放入到HTML...

    redis专栏 002 springboot redis 防止表单重复提交

    使用Redis和Spring Boot来防止表单重复提交的基本思路是:在接收到表单提交请求后,生成一个唯一的请求标识(例如,基于UUID),并将其作为键存储到Redis中,设置一个适当的过期时间。当服务器接收到新的请求时,会...

    几种防止表单重复提交的方法

    几种防止表单重复提交的方法 禁掉提交按钮。表单提交后使用Javascript使提交按钮disable。这种方法防止心急的用户多次点击按钮。但有个问题,如果客户端把Javascript给禁止掉,这种方法就无效了。 我之前的文章曾说...

    struts2利用token防止表单重复提交(源代码)

    struts2防止表单重复提交,利用struts的拦截器tokenSession,轻轻松松解决表单重复提交的问题。 附件为源代码,后台延迟了3秒,可直接在web服务器下部署运行,输入用户名和密码后,多点几次提交按钮,然后看控制台...

    JavaScript防止表单重复提交代码,指定时间内禁止重复点击.zip

    在Web开发中,防止表单重复提交是一个常见的需求,特别是在涉及关键操作如用户登录、支付等场景下。JavaScript作为客户端脚本语言,可以用来实现这一功能,以避免用户无意或恶意地连续点击提交按钮,导致服务器接收...

    struts数据回显、模型驱动、防止表单重复提交

    本主题将深入探讨Struts框架中的数据回显、模型驱动以及如何防止表单重复提交,这些都是在实际开发中非常关键且实用的技术点。 1. 数据回显: 数据回显是指在用户提交表单后,服务器端处理数据并返回结果页面时,将...

Global site tag (gtag.js) - Google Analytics