package com.gc.struts.action;
import java.io.File;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
/**
* MyEclipse Struts
* Creation date: 06-10-2010
*
* XDoclet definition:
* @struts.action validate="true"
*/
public class YulanAction extends Action {
/*
* Generated Methods
*/
/**
* Method execute
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
String token=this.generateToken(request);
request.setAttribute("clientToken", token);
request.getSession().setAttribute("token", token);
return mapping.findForward("ok");//跳转到showExcel.jsp
}
}
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%
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>showExcel.jsp Content</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">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<%
String clintToken=request.getAttribute("clientToken")==null?"":request.getAttribute("clientToken").toString();
%>
<form action="showExcel.do" method="post">
<input type="hidden" value="<%=clintToken %>" name="clientToken"/>
<input type="submit" value="提交" />
</form>
</body>
</html>
package com.gc.struts.action;
import java.io.File;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.gc.struts.form.TestForm;
/**
* MyEclipse Struts
* Creation date: 06-10-2010
*
* XDoclet definition:
* @struts.action validate="true"
*/
public class ShowExcelAction extends Action {
/*
* Generated Methods
*/
/**
* Method execute
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
TestForm test=(TestForm)form;
for(int i=0;i<1000000000;i++){
}//这个是为了能多点几次提交
String clientToken=test.getClientToken();
Object sessionToken=request.getSession().getAttribute("token");
System.out.println(sessionToken);
if(sessionToken!=null&&!sessionToken.toString().equals(clientToken)){
System.out.println("重复提交了");
}else{
System.out.println("提交表单");
}
String token=this.generateToken(request);
request.getSession().setAttribute("token", token);
return null;
}
}
看看打印结果:
9694ec0baa72277bbeb071356b351cd4
提交表单
f55c7a7d71b2635130438a193bd30225
重复提交了
df7c73b27c0582613e7d11f79a15ae58
重复提交了
f2778990b6abbaaec84ba89e4de24dfc
重复提交了
80fb030346bfb023abb596a34eb05d5a
重复提交了
c071865f5efbe2e7aa127ac1d3ef83d3
重复提交了
9b68a90308a5ff4635c575f5a189c86f
重复提交了
62d557df874c638fbdd1172917e2b095
重复提交了
860d5ce47de84e953f69a70b13f6473f
重复提交了
8c310fedb5de55ce53a45e1a0d2aadb8
重复提交了
88b2a367f783475473928ac420d468f3
重复提交了
只提交了一次。
分享到:
相关推荐
1. **表单重复提交问题**:当用户在提交表单时,由于网络延迟或用户误操作,可能会导致同一个表单被多次提交。例如,在购物网站上,用户可能因点击按钮太快而无意中购买了多份商品。 2. **Struts2框架**:Struts2是...
struts2防止表单重复提交,利用struts的拦截器tokenSession,轻轻松松解决表单重复提交的问题。 附件为源代码,后台延迟了3秒,可直接在web服务器下部署运行,输入用户名和密码后,多点几次提交按钮,然后看控制台...
下面将详细解释Struts2如何通过重定向来防止表单重复提交。 首先,理解表单重复提交的场景:用户在提交表单后,由于网络延迟或其他原因,可能会无意中多次点击提交按钮。如果服务器没有处理这些重复请求,那么相同...
Struts2作为一个流行的Java Web框架,为解决表单重复提交提供了多种方法。 首先,关于表单重复提交的原因,有以下几点: 1. 服务器或网络延迟导致用户多次点击提交按钮。 2. 用户在表单提交后刷新浏览器页面。 ...
在Struts2中防止表单重复提交的过程主要包括以下几个步骤: 1. **生成Token**:当用户发起表单请求时,服务器会生成一个唯一的Token并将其存储在服务器的会话(Session)中,同时将这个Token作为隐藏字段放入到HTML...
3. **验证令牌**:当用户提交表单时,`token`拦截器会检查请求参数中的令牌值与Session中的令牌值是否匹配。如果匹配,拦截器会清除Session中的令牌并继续执行Action;如果不匹配,表示可能有重复提交,Action将返回...
### Struts2防止表单重复提交的技术解析 #### 一、引言 在Web应用程序开发过程中,表单重复提交是一个常见的问题,特别是在网络环境不稳定或用户误操作的情况下。这种重复提交不仅可能导致数据冗余,还可能引起事务...
本篇文章将深入探讨如何防止表单重复提交,主要关注于基于Struts2框架的解决方案。 首先,理解表单重复提交的原因。用户在点击提交按钮后,如果网络延迟或用户误操作导致页面刷新或再次点击提交,就可能发生重复...
"防止表单重复提交 token"是Struts2提供的一种解决方案,通过在请求中加入一个唯一的token来确保请求的唯一性和一致性。 首先,我们来看如何实现这个机制。在Struts2中,我们可以使用拦截器(Interceptor)来实现...
本主题将深入探讨Struts框架中的数据回显、模型驱动以及如何防止表单重复提交,这些都是在实际开发中非常关键且实用的技术点。 1. 数据回显: 数据回显是指在用户提交表单后,服务器端处理数据并返回结果页面时,将...
Struts Token机制是一种防止表单重复提交的有效策略,尤其在处理关键操作时,如金融交易或数据修改,防止用户意外或恶意多次点击提交按钮导致的数据重复性问题。下面将详细介绍Struts Token的工作原理、实现方式及其...
综上所述,Struts框架通过Token机制有效地解决了表单重复提交的问题,提供了更健壮的Web应用安全性。正确理解和应用这一机制对于Java Web开发者来说至关重要。在实际项目中,结合其他防御策略,如CSRF防护,可以...
为了防止这种表单重复提交,Struts提供了一种令牌(Token)机制。令牌机制的工作原理如下: 1. **设置令牌**:在用户访问表单之前,Action类中的`execute`方法会调用`saveToken`方法,将一个唯一的令牌保存在请求...
总结来说,Servlet、Struts和SpringMVC都提供了各自的解决方案来防止表单重复提交,主要方法包括使用Session、令牌机制、重定向和拦截器等。开发者可以根据项目需求选择合适的方式来实现,确保应用的稳定性和数据...
通过这种方式,Struts+Token机制可以有效地防止由于用户误操作或者网络延迟造成的表单重复提交,保证了服务器端数据的一致性和完整性。对于大型的、对数据一致性有严格要求的Web应用来说,这是一个非常重要的安全...
在Struts1.2中处理表单提交,特别是当表单数据包含列表对象时,需要理解一些核心概念和技术。这篇博客文章可能详细探讨了如何在Struts1.2中处理这类情况。 首先,让我们来了解Struts1.2中的表单提交流程。当用户在...
Struts2提供了几种策略来防止表单的重复提交,确保请求的唯一性和事务的一致性。 一、令牌(Token)机制 Struts2的Token插件是防止重复提交的一种常见方法。这里的"Strut2Token"很可能是指这个插件的应用。它的...