避免重复提交

action :
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package com.yourcompany.struts.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
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.yourcompany.struts.form.TestTokenForm;

/**
* MyEclipse Struts Creation date: 08-29-2008
*
* XDoclet definition:
*
* @struts.action path="/testToken" name="testTokenForm"
* input="/form/testToken.jsp" scope="request" validate="true"
* @struts.action-forward name="sucess" path="/MyJsp.jsp"
*/

public class TestTokenAction extends Action {

public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
TestTokenForm testTokenForm = (TestTokenForm) form;// TODO
// Auto-generated
// method stub\
boolean blug = this.isTokenValid(request);
if(blug){
this.resetToken(request);
System.out.println("I love Ora");
}

return mapping.findForward("index");
}
}
pre:/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package com.yourcompany.struts.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
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.yourcompany.struts.form.PreForm;

/**
* MyEclipse Struts
* Creation date: 08-29-2008
*
* XDoclet definition:
* @struts.action path="/pre" name="preForm" input="/form/pre.jsp" scope="request" validate="true"
* @struts.action-forward name="MyJsp" path="/MyJsp.jsp"
*/
public class PreAction 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) {
PreForm preForm = (PreForm) form;// TODO Auto-generated method stub
this.saveToken(request);

return mapping.findForward("MyJsp");

}
}


jsp页面源代码;

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="zh-CN">
<head>
<base href="http://localhost:8081/Token/MyJsp.jsp">

<title>MyJsp.jsp</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>
<form name="testTokenForm" method="post" action="/Token/testToken.do"><div><input type="hidden" name="org.apache.struts.taglib.html.TOKEN" value="e52f13b4a3e49bdf52cce503388eaa05"></div>
name:<input type="text" name="name"/>
sex:<input type="text" name="sex"/>
age:<input type="text" name="age"/>
<input type ="submit" name ="ss" value="提交">
</form>
</body>
</html>
在Java中,避免重复提交通常可以通过以下几种方式来实现: 1. 前端验证:在前端页面使用JavaScript进行验证,例如通过禁用提交按钮或者设置提交按钮只能点击一次来防止重复提交。 2. Token验证:在后端生成一个唯一的Token并将其存储在session或者cookie中,然后将该Token传递给前端,在每次提交请求时都携带该Token。后端在处理请求时先验证Token的有效性,如果验证通过,则处理请求并将Token标记为已使用,否则拒绝请求。 3. 幂等性设计:在设计接口时考虑使用幂等性操作,即多次执行该操作所产生的结果与执行一次相同操作的结果相同。这样即使用户重复提交相同的请求,也不会对系统产生副作用。例如,在数据库中插入数据时,可以使用唯一约束来防止重复插入。 4. 限制时间窗口:在接收到请求后,在一定时间窗口内记录下该请求的唯一标识(如IP地址、用户ID等),并将其存储在缓存或数据库中。在处理后续请求时,先检查是否在时间窗口内存在相同标识的请求,如果存在,则拒绝处理。 5. 使用状态机:在处理请求的过程中使用状态机来记录请求的状态,例如将请求状态保存在数据库中。当接收到新的请求时,先检查请求的状态,如果已经处理过,则拒绝请求。 这些方法可以单独使用,也可以结合使用,根据具体的业务需求选择合适的方式来避免重复提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值