在这里我是通过新加一个flag来判断它是否是重复提交,从而截断其多次提交。
这个flag是在我要提交表单的这支jsp里面存入session里面的,同时在表单中使用<input type="hidden">把该flag值传入action,再在action中分别通过request.getParameter("flag")
和request.getSession.getAttribute("flag")来获取我的这个flag进行比较它们是否相等来判断是否提交。具体事例见如下:
1、首页看一个简单的preview.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ page import="java.util.*"%>
<%
String validate_imageURL = request.getContextPath() + "/validate/validate_image.jsp";
response.setHeader("Cache-Control", "no-cache");
Random rand = new Random();
Integer flag = new Integer(rand.nextInt());
String str_flag = flag.toString();
session.setAttribute("sflag", str_flag);
%>
<s:form action="publicMessage" name="form1" method="post" theme="simple">
<input type=hidden name="sflag" value="<%=str_flag%>" />
<input type="text" name="name" value="">
<input type="submit" value='发表' class="reSubmit" >
</s:form>
2、 对应的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>
<package name="message" extends="yepbook-public">
<action name="publicMessage" class="lee.BugLogAction" method="publicMessage">
<result name="success" type="tiles">message.leave.layout</result>
<result name="error" type="tiles">message.leave-error.layout</result>
</action>
</package>
</struts>
3、对应的class文件lee.PublicAction.java
package lee;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts2.interceptor.ServletRequestAware;
import com.opensymphony.xwork2.ActionSupport;
public class BugLogAction extends ActionSupport implements ServletRequestAware
{
public static final Log log = LogFactory.getLog(BugLogAction.class);
private HttpServletRequest request;
public String publicMessage()
{
try{
Integer flag1 = new Integer(Integer.parseInt(request.getParameter("sflag")));
String l_strflag1 = flag1.toString();
if (l_strflag1.equals(request.getSession().getAttribute("sflag")))
{
String name= request.getParameter("name");
//其它要进行的操作 ...
request.getSession().removeAttribute("sflag");
}
else
{
request.getSession().removeAttribute("sflag");
log.warn("message save repeat");
}
}catch (Exception e)
{
e.printStackTrace();
log.error(StringUtil.getStackTraceAsString(e));
return ERROR;
}
return SUCCESS;
}
public void setServletRequest(HttpServletRequest request)
{
this.request = request;
}
}
分享到:
相关推荐
3. **更新令牌**:在处理完表单数据后,需要更新Session中的令牌,以便于下次提交时能够正确地识别是否为重复提交。 #### 代码示例分析 以下是从提供的部分代码示例中提炼的关键代码片段及解释: ```csharp ...
在Web开发中,表单重复提交是一个常见的问题,它可能会导致数据冗余或者不一致,尤其是在处理关键操作如交易、订单或用户注册时。这里我们深入探讨这个问题,并提供解决方案。 标题"表单重复提交问题1"所涉及的核心...
在使用Layui设计表单时,经常会遇到表单提交后页面刷新导致的重复提交问题。为了解决这个问题,开发者需要确保表单只提交一次,防止不必要的数据重复处理或者服务器的重复计算。下面详细解释几种防止Layui表单重复...
在ASP.NET web应用程序中,"刷新重复提交"是一个常见的问题,它发生在用户点击浏览器的刷新按钮或者使用前进/后退导航时。这可能导致数据的不一致性和错误,因为服务器可能会收到相同请求的多次处理,而这些请求原本...
在Web开发中,表单重复提交是一个常见的问题,可能导致数据的冗余或错误。JavaScript作为客户端脚本语言,可以通过多种策略来防止用户意外或恶意地多次提交表单。以下是一些关键的知识点: 1. **禁用提交按钮**:最...
通过这样的设置,当用户在登录成功后刷新页面时,浏览器将会跳转到指定的页面,而不会导致重复提交表单的问题。 综上所述,Struts2框架提供了token机制以及灵活的跳转方式配置来解决表单重复提交的问题。开发者在...
- 使用异步处理:使用Ajax提交表单,可以避免页面整体刷新,减少重复提交的机会。 - 提供明确的用户反馈:当表单成功提交后,显示清晰的反馈信息,告知用户操作已完成,防止他们因不清楚状态而多次尝试。 综上所...
防止页面刷新重复提交是 Web 开发中常见的问题,多次提交表单可能会导致不必要的数据重复录入、服务器压力增大等问题。下面我们将详细介绍防止页面刷新重复提交的方法。 一、验证码方法 验证码方法是防止页面刷新...
在J2EE框架中,开发过程中常常会遇到一些与用户交互相关的技术问题,如重复提交、重复刷新以及防止用户后退导致的数据不一致。这些问题在实际应用中可能会对系统的稳定性和数据完整性造成影响,因此需要采取相应的...
在处理用户交互时,尤其是表单提交,一个常见的问题是防止表单的重复提交。这可能导致数据的不一致性和其他问题。本文将深入探讨如何在Struts框架中利用Token机制来解决这个问题。 一、表单重复提交问题 表单重复...
在Web开发中,防止用户刷新页面...综上所述,本资源提供的代码和说明可以帮助开发者理解并实施防止用户刷新重复提交数据的机制,通过使用Token,可以有效地保护Web应用免受重复操作的困扰,提高系统的稳定性和安全性。
重复提交通常发生在用户在未收到明确反馈的情况下尝试多次提交表单的情况。这种情况可能会导致数据库中出现重复的数据记录,从而影响数据的一致性和准确性。例如,在在线购物系统中,用户可能会担心支付请求没有被...
在Web开发中,用户在提交表单后可能会意外地点击浏览器的刷新或后退按钮,导致数据重复提交,这在数据库操作中可能引起严重问题,比如财务交易的重复扣款或者用户信息的重复录入。针对这个问题,我们可以采取多种...
第二种情况,用户在表单提交后刷新页面,会导致浏览器重新发送之前的POST请求,从而可能重复提交表单。由于HTTP协议的特性,GET请求的刷新不会造成问题,但POST请求会被再次发送。为解决这个问题,可以采用服务器端...
在我们进行Java Web开发时,提交一个action处理请求后(或者提交一个表单后),进行刷新操作,或按F5键时会出现action处理重复执行的情况,数据库中会出现多条同样的记录,解决这种问题的方法有多种,但最安全有效的...
服务器端避免表单的重复提交,利用同步令牌来解决重复提交的基本原理如下:(1)用户访问提交数据的页面,服务器端在这次会话中,创建一个session对象,并产生一个令牌值,将这个令牌值作为隐藏输入域的值,随表单一起发送到...
在Web开发中,尤其是使用JavaServer Pages (JSP) 技术时,页面表单的重复提交是一个常见的问题。这可能会导致数据不一致或者服务端处理逻辑错误。本篇文章将探讨如何有效地防止JSP页面中的表单重复提交,确保系统的...
通过自定义的Token类和方法,我们可以在不依赖Struts内置机制的情况下实现防止表单重复提交的功能。这种方式不仅灵活,而且易于理解和维护。开发者可以根据实际需求调整Token生成、存储和验证的方式,以适应不同的...