`

Struts2之防表单重复提交

阅读更多
「struts2中防止表单重复提交」

1.造成表单重复提交原因
  a.由于服务器处理延迟缘故,人为缘故再次提交.
  b.由Forward(转发)跳转引起重复提交.当用户将信息提交到服务器时,服务器想响应采用的forward方式跳转到下一个页面,但是此时浏览器的地址栏不会更改(依旧显示的上一个页面的地址)如果刷新当前页面,会造成表单的再一次的提交.(如果采用redirect"重定向"方式进行跳转页面,就不会出现这种情况的表单重复提交问题,但有时为了达到某种效果,或出于网站安全的目的需要隐藏网页跳转,就需要采用forward"转发"方式).

2.struts2中的token和tokenSession运作原理
  1).当用户首次访问表单页面时,服务器会在这次会话中创建一个session对象,并产生一个令牌值(token),然后将这个令牌值作为隐藏域的值,随表单一起发送到服务器端,同时将令牌值保存到session对象中.
  2).在用户提交页面时,服务器首先判断请求请求参数中的令牌值和session对象中的令牌值是否相等,若相等,则清除session的令牌值,然后执行数据操作.如果不相等,则提示用户已经提交过了表单,同时产生一个新的令牌值,保存到session中,当用户重新访问提交数据页面时,将新产生的令牌值作为隐藏域的值.

3.运用
1).在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.ui.theme" value="simple" />
	<!-- struts2在防止表单重复提交的拦截中有2个,分别是:token,tokenSession.tokenSession继承token而来. 
		通常情况下,使用tokenSession客户端感觉会比较友好。 -->
	<!-- 如果重复提交,会跳转到error.jsp页面 . -->
	<package name="person" namespace="/test" extends="struts-default">
		<action name="token" class="org.oolin.action.PersonAction">
			<interceptor-ref name="defaultStack" />
			<interceptor-ref name="token" />
			<!-- 如果重复提交,跳转到error.jsp页面 -->
			<result name="invalid.token">/WEB-INF/page/error.jsp</result>
			<result>/WEB-INF/page/message.jsp</result>
		</action>
		<action name="tokenSession" class="org.oolin.action.PersonAction">
			<interceptor-ref name="defaultStack"/>
			<interceptor-ref name="tokenSession"/>
			<!-- 如果重复提交,不会跳转到error.jsp页面 -->
			<result name='invalid.token'>?WEB-INF/page.jsp</result>
			<result>/WEB-INF/page/message.jsp</result>
		</action>
	</package>

</struts>

ps:其中token和tokenSession任意一个都行.
  2).表单页面index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib uri="/struts-tags" prefix="s" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>防止表单重复提交</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	
  </head>
  
  <body>
    <!-- 防止表单重复提交,记得在form表单里填上<s:token></s:token> -->
    <s:form action="token" namespace="/test" method="post">
    	name:<s:textfield name="name" />
    	<s:token></s:token>
    	<input type="submit" value="发送"/>
    </s:form>
    
  </body>
</html>


ps:还有一种在浏览器端的防止表单重复提交,属于js的工作范畴,稍后提供.
分享到:
评论

相关推荐

    Struts2解决表单重复提交

    Struts2作为一个流行的Java Web框架,为解决表单重复提交提供了多种方法。 首先,关于表单重复提交的原因,有以下几点: 1. 服务器或网络延迟导致用户多次点击提交按钮。 2. 用户在表单提交后刷新浏览器页面。 ...

    struts2 防止表单重复提交的例子

    在Web开发中,表单重复提交是一个常见的问题,它可能导致数据的不一致性或者服务端处理逻辑的混乱。Struts2框架提供了一种解决方案,即使用Token机制来防止表单的重复提交。以下是对这个主题的详细说明: 1. **表单...

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

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

    Struts2防止表单重复提交示例

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

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

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

    Struts2防止重复提交解决方案

    在Struts2中,防止重复提交是一个重要的问题,因为它可能导致数据不一致性和服务器资源的浪费。本文将详细介绍如何在Struts2中解决这个问题,以及相关的技术概念。 首先,我们要理解Struts2中的拦截器(Interceptor...

    struts token机制解决表单重复提交

    Struts Token机制是一种防止表单重复提交的有效策略,尤其在处理关键操作时,如金融交易或数据修改,防止用户意外或恶意多次点击提交按钮导致的数据重复性问题。下面将详细介绍Struts Token的工作原理、实现方式及其...

    Struts之Token解决表单那重复提交

    综上所述,Struts框架通过Token机制有效地解决了表单重复提交的问题,提供了更健壮的Web应用安全性。正确理解和应用这一机制对于Java Web开发者来说至关重要。在实际项目中,结合其他防御策略,如CSRF防护,可以...

    struts2令牌解决页面重复提交问题

    Struts2是一个流行的Java web框架,它...总的来说,Struts2的令牌机制是通过生成和验证令牌来防止重复提交和CSRF攻击的有效方式。开发者应当理解其工作原理,并在需要的地方正确使用,以提高应用程序的安全性和稳定性。

    Struts2文件上传下载和表单重复提交问题

    在实际应用中,文件上传和下载以及防止表单重复提交是两个常见的需求,同时也是开发者必须掌握的重要技能。 1. **文件上传** 文件上传功能在Struts2中通过`Struts2`提供的插件来实现,主要依赖于`Apache Commons ...

    Servlet、Struts、SpringMVC对于表单重复提交的解决方案

    总结来说,Servlet、Struts和SpringMVC都提供了各自的解决方案来防止表单重复提交,主要方法包括使用Session、令牌机制、重定向和拦截器等。开发者可以根据项目需求选择合适的方式来实现,确保应用的稳定性和数据...

    Struts2 表单 重复提交

    "防止表单重复提交 token"是Struts2提供的一种解决方案,通过在请求中加入一个唯一的token来确保请求的唯一性和一致性。 首先,我们来看如何实现这个机制。在Struts2中,我们可以使用拦截器(Interceptor)来实现...

    struts+token机制解决表单重复提交

    通过这种方式,Struts+Token机制可以有效地防止由于用户误操作或者网络延迟造成的表单重复提交,保证了服务器端数据的一致性和完整性。对于大型的、对数据一致性有严格要求的Web应用来说,这是一个非常重要的安全...

    防止表单重复提交

    本篇文章将深入探讨如何防止表单重复提交,主要关注于基于Struts2框架的解决方案。 首先,理解表单重复提交的原因。用户在点击提交按钮后,如果网络延迟或用户误操作导致页面刷新或再次点击提交,就可能发生重复...

    【原创】Struts2防止表单重复提交.doc

    ### Struts2防止表单重复提交的技术解析 #### 一、引言 在Web应用程序开发过程中,表单重复提交是一个常见的问题,特别是在网络环境不稳定或用户误操作的情况下。这种重复提交不仅可能导致数据冗余,还可能引起事务...

    Struts2 防重复提交Demo

    Struts2是一个流行的Java Web框架,它为开发者...通过上述步骤,Struts2的`s:token`标签可以帮助开发者有效地防止重复提交,保证Web应用程序的数据一致性。理解并正确使用这个功能,可以提升应用的健壮性和用户体验。

    Struts表单重复提交问题

    为了防止这种表单重复提交,Struts提供了一种令牌(Token)机制。令牌机制的工作原理如下: 1. **设置令牌**:在用户访问表单之前,Action类中的`execute`方法会调用`saveToken`方法,将一个唯一的令牌保存在请求...

Global site tag (gtag.js) - Google Analytics