在jsp+javabean+servlet里如何防止用户能过刷新重复的提交数据 我现在做的是一个jsp+javabean+servlet的系统啊是用servlet来处理业务逻辑所以地址栏上URL地址上老是停在第一次调用servlet上面所以如果用户发现这个问题的话他们就可以通过刷新重复的刷新写入数据啊大家有没有什么好的解决方案呢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 显示表单的时候在session中生成一个随机数<%Integer flag=new Integer(rand.nextInt());session.setAttribute("flag",flag);%><input type=hidden name="flag" value="<%=flag%>">在提交时验证Integer flag = new Integer(Integer.parseInt(request.getParameter("flag")));if(flag.equals(session.getAttribute("flag")){ //更新数据 session.removeAttribute("flag");}else{ //重复提交了,处理代码} 可以再改进一下,把销毁和新建一个标识放在一起进行sessionlistener里sessioncreated方法里session.setAttribute("flag",初始值);生成表单页面时<input type=hidden name="flag" value="<%=session.getAttribute("flag")%>">表单处理时Integer flag = new Integer(Integer.parseInt(request.getParameter("flag")));if(flag.equals(session.getAttribute("flag")){ //更新数据 resetFlag();}else{ //重复提交了,处理代码}void resetFlag(){ session.setAttribute("flag",rand.nextInt);} struts框架有利用Token(就是楼上所说的随机数)防止重复提交的部分,楼主可以参考一下 dreamover(梦醒了) ( ) 信誉:100 2006-8-8 11:58:18 得分: 0 显示表单的时候在session中生成一个随机数<%Integer flag=new Integer(rand.nextInt());session.setAttribute("flag",flag);%><input type=hidden name="flag" value="<%=flag%>">在提交时验证Integer flag = new Integer(Integer.parseInt(request.getParameter("flag")));if(flag.equals(session.getAttribute("flag")){ //更新数据 session.removeAttribute("flag");}else{ //重复提交了,处理代码} 这个有个问题就是这样的.当用户第一次提交数据的时(没刷新).这个时候代码是没问题.数据操作完成就removeAttribute()了.当用户刷新时,确实不会通过.不过这个时候session.getAttribute("flag")并没有flag了..所以程序会报错. 可以再改进一下,把销毁和新建一个标识放在一起进行sessionlistener里sessioncreated方法里session.setAttribute("flag",初始值);生成表单页面时<input type=hidden name="flag" value="<%=session.getAttribute("flag")%>">表单处理时Integer flag = new Integer(Integer.parseInt(request.getParameter("flag")));if(flag.equals(session.getAttribute("flag")){ //更新数据 resetFlag();}else{ //重复提交了,处理代码}void resetFlag(){ session.setAttribute("flag",rand.nextInt);} 这个代码确实避免了程序的报错.采用的原理是随即生成的随即数很大程度上是不会相同的.不过也要避免.万一你提交后产生的随即数和开始的相同(虽然几率很小.几乎没有.)可是程序开发,要做到能避免就避免的.所以我觉得在void resetFlag(){Integer flags=new Integer(rand.nextInt()); if(flags==flag) { flags=new Integer(rand.nextInt()); } else { session.setAttribute("flag",rand.nextInt); }}楼主做人要厚道,记得结贴给分哦 这个有个问题就是这样的.当用户第一次提交数据的时(没刷新).这个时候代码是没问题.数据操作完成就removeAttribute()了.当用户刷新时,确实不会通过.不过这个时候session.getAttribute("flag")并没有flag了..所以程序会报错.=============================================这儿不会报错的,因为我的session.getAttribute("flag")是在equals()方法里 使用orcale数据库hibernate能用多对多关系吗 myEclipse 求救 求单点登录解决方案 jsp数据库更新问题 简单的java时间处理问题,请进来拿分! 请问把一个表空间的部分表怎么才能copy到另一表空间 关于用到enctype="multipart/form-data"后在JSP里取参数的问题 请问连接池在servlet中应该如何使用呢? struts2框架使用ajaxFileUpload上传文件问题 jquery 获取自身html元素 Web Service中客户端、服务器端何时产生密钥对和认证库,如何使Client获得Server的公钥? 用jdbc 连接db2 问题
Integer flag=new Integer(rand.nextInt());
session.setAttribute("flag",flag);
%>
<input type=hidden name="flag" value="<%=flag%>">在提交时验证
Integer flag = new Integer(Integer.parseInt(request.getParameter("flag")));
if(flag.equals(session.getAttribute("flag")){
//更新数据
session.removeAttribute("flag");
}else{
//重复提交了,处理代码
}
sessionlistener里sessioncreated方法里session.setAttribute("flag",初始值);生成表单页面时
<input type=hidden name="flag" value="<%=session.getAttribute("flag")%>">表单处理时
Integer flag = new Integer(Integer.parseInt(request.getParameter("flag")));
if(flag.equals(session.getAttribute("flag")){
//更新数据
resetFlag();
}else{
//重复提交了,处理代码
}void resetFlag(){
session.setAttribute("flag",rand.nextInt);
}
显示表单的时候在session中生成一个随机数<%
Integer flag=new Integer(rand.nextInt());
session.setAttribute("flag",flag);
%>
<input type=hidden name="flag" value="<%=flag%>">在提交时验证
Integer flag = new Integer(Integer.parseInt(request.getParameter("flag")));
if(flag.equals(session.getAttribute("flag")){
//更新数据
session.removeAttribute("flag");
}else{
//重复提交了,处理代码
}
这个有个问题就是这样的.
当用户第一次提交数据的时(没刷新).
这个时候代码是没问题.
数据操作完成就removeAttribute()了.
当用户刷新时,确实不会通过.不过这个时候session.getAttribute("flag")并没有flag了..
所以程序会报错.
可以再改进一下,把销毁和新建一个标识放在一起进行
sessionlistener里sessioncreated方法里session.setAttribute("flag",初始值);生成表单页面时
<input type=hidden name="flag" value="<%=session.getAttribute("flag")%>">表单处理时
Integer flag = new Integer(Integer.parseInt(request.getParameter("flag")));
if(flag.equals(session.getAttribute("flag")){
//更新数据
resetFlag();
}else{
//重复提交了,处理代码
}void resetFlag(){
session.setAttribute("flag",rand.nextInt);
}
这个代码确实避免了程序的报错.
采用的原理是随即生成的随即数很大程度上是不会相同的.
不过也要避免.万一你提交后产生的随即数和开始的相同(虽然几率很小.几乎没有.)
可是程序开发,要做到能避免就避免的.
所以我觉得在void resetFlag()
{
Integer flags=new Integer(rand.nextInt());
if(flags==flag)
{
flags=new Integer(rand.nextInt());
}
else
{
session.setAttribute("flag",rand.nextInt);
}
}
楼主做人要厚道,记得结贴给分哦
当用户第一次提交数据的时(没刷新).
这个时候代码是没问题.
数据操作完成就removeAttribute()了.
当用户刷新时,确实不会通过.不过这个时候session.getAttribute("flag")并没有flag了..
所以程序会报错.=============================================这儿不会报错的,因为我的session.getAttribute("flag")是在equals()方法里