jsp + struts 怎么防止重复提交啊

renanxing 2009-03-20 01:28:17
各位大哥,我现在用的是jsp+hibernate+struts+spring技术,做一 网站,不知道怎么防止重复提交,请各位大哥帮个忙,给个方法!谢谢啊
...全文
150 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaowu_wings 2009-03-20
  • 打赏
  • 举报
回复
令牌机制,代码在楼上
liang__ 2009-03-20
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 renanxing 的回复:]
OUYANGKANG 大哥,怎么在struts-config里配置token check啊,在页面和action里还得控制么?
[/Quote]

google一下多好啊。
djjchobits 2009-03-20
  • 打赏
  • 举报
回复
建一个Insert.jsp页面代码如下:
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<html:html locale="true">
<head>
<html:base />
<title>insert.jsp</title>
</head>
<body>
<html:form action="insert" method="post">
<bean:message key="label.name"/><html:text property="name" />
<bean:message key="label.phone"/><html:text property="phone"/>
<bean:message key="label.address"/><html:text property="address"/>
<html:submit ><bean:message key="modify.add"/></html:submit>
<html:reset><bean:message key="button.reset"/></html:reset>
</html:form>
<html:errors/>
</body>
</html:html>
建一个InsertAction代码如下:
//Created by MyEclipse Struts
// XSL source (default): platform:/plugin/com.genuitec.eclipse.cross.easystruts.eclipse_4.1.1/xslt/JavaClass.xsl

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.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.yourcompany.bean.ListBean;
import com.yourcompany.struts.form.ModifyForm;

/**
* MyEclipse Struts
* Creation date: 02-20-2007
*
* XDoclet definition:
* @struts.action validate="true"
*/
public class InsertAction extends Action {
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
ModifyForm modifyForm = (ModifyForm) form;
//得到token
String token_request =request.getParameter("org.apache.struts.taglib.html.TOKEN");
//打出来看看是什么东东
System.out.println("token in request is:"+ token_request);
ActionErrors errors = new ActionErrors();
//判断token是否有效,如果为假证明有重复提交,声明一个错误信息,并反馈出来
if(!isTokenValid(request)){
errors.add("insettoken",new ActionError("error.invalid.token"));

saveErrors(request, errors);
saveToken(request);
return (new ActionForward(mapping.getInput()));
}
//当用户首次提交时返!isTokenValid()返回true
else{
resetToken(request);
}
int result=new ListBean().add(modifyForm);

if(result==1){
return mapping.findForward("addlist");
}else{
return mapping.findForward("error");
}
}

}
建一个PrepareInsertAction代码如下:
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;

/**
* MyEclipse Struts
* Creation date: 02-20-2007
*
* XDoclet definition:
* @struts.action validate="true"
*/
public class PrepareInsertAction extends Action {
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
System.out.print("hello PrepareInsertAction");
//创建一个新的令牌
saveToken(request);
return mapping.findForward("inserttoken");
}
}
renanxing 2009-03-20
  • 打赏
  • 举报
回复
OUYANGKANG 大哥,怎么在struts-config里配置token check啊,在页面和action里还得控制么?
sun403 2009-03-20
  • 打赏
  • 举报
回复
jsp页面做一个验证码,要不就用session控制页面显示
suncheng_hong 2009-03-20
  • 打赏
  • 举报
回复
很简单啊。每当save之后重定向redirect到另一个页面就可以了。这样再刷新也没有用的。
当然用struts的token也可以。
ouyangxiaokang6 2009-03-20
  • 打赏
  • 举报
回复
在你的struts-config.xml里面配置token check,专门防止二次提交的
yinyuehan823 2009-03-20
  • 打赏
  • 举报
回复
token
fireelf000 2009-03-20
  • 打赏
  • 举报
回复
struts本身提供的防止重复提交的方法
saveToken和isTokenValid这两个方法
lzt2008 2009-03-20
  • 打赏
  • 举报
回复
传参数,你可以将第一次的值传为:save
以后传为:update
dragon_fire 2009-03-20
  • 打赏
  • 举报
回复
验证码 或是利用struts的token 拦截器
mysky191_chi 2009-03-20
  • 打赏
  • 举报
回复
前台设置button的状态,enable/disable,通过JS转换状态
zqmlf2000 2009-03-20
  • 打赏
  • 举报
回复
token
sunhuaiwei 2009-03-20
  • 打赏
  • 举报
回复
每做完一个按钮提交的程序后,你可以重新定向一次,这样按钮不会重复提交,也可以做个判断,进行出来
三月暖阳 2009-03-20
  • 打赏
  • 举报
回复
用前台的js验证吧
zhaokaide 2009-03-20
  • 打赏
  • 举报
回复
可以用struts 的saveToken 来做
也可以在页面上提交的时候用js来控制按狃的使用
qqqqqwwqqq 2009-03-20
  • 打赏
  • 举报
回复
1.做个验证码

2.定义一个变量a在session里 登陆成功的时候 定义a并设置为1 重复提交的时候 查询a 如果a为1 则返回false 否则就可以登录

81,076

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧