JSP防止网页刷新重复提交数据的几种方法

本篇文章主要介绍了网页如何防止刷新重复提交与如何防止后退的解决方法,具体如下:

提交后禁用提交按钮(大部分人都是这样做的)

如果客户提交后,按F5刷新怎么办?

使用Session

在提交的页面也就是数据库处理之前:

if session("ok")=true then response.write "错误,正在提交" response.end end if

数据处理完后,修改session("ok")=false。

数据处理成功马上Redirect到另外一个页面

操作后刷新的确是个问题,你可以使用跳转页面、关闭本页面,如果是有参数据条件来控制的,那就应该好做了,可以直接修改window.location的值,把参数全部改掉,这样就差不多了。

缺点:简单地运用Response.Redirect将不再有效,因为用户从一个页面转到另一个页面,我们都必须用客户端代码清除location.history。注意,这种方法清除的是最后一个访问历史记录,而不是全部的访问记录。 点击后退按钮,再点击后退按钮,你可以看到这时打开的是本页面之前的页面!(当然,这是在你的客户端启用了JavaScript功能的条件下。)

如果客户按后退,怎么办?

防止网页后退--禁止缓存

我们在进行数据库添加操作的时候,如果允许后退,而正巧有刷新了页面,就会再次执行添加操作,无疑这不是我们需要的,像一般网上很多禁止缓存的代码,有时并不可靠,这时你只要在操作的页面加上就可以了,在网页的里指定要定向的新页,再点后退,看是不是不会再退到刚才的操作页面了,实际上已经把这个历史给删除了

ASP:

Response.Buffer = True Response.ExpiresAbsolute = Now() - 1 Response.Expires = 0 Response.CacheControl = "no-cache"

ASP.NET:

Response.Buffer=true; Response.ExpiresAbsolute=DateTime.Now.AddSeconds(-1); Response.Expires=0; Response.CacheControl="no-cache";

究竟怎样才能"禁用"浏览器的后退按钮?或者“怎样才能防止用户点击后退按钮返回以前浏览过的页面?”

遗憾的是,我们无法禁用浏览器的后退按钮。

防止网页后退--新开窗口

用window.open弹出表单页面,点提交后关闭该页;处理提交的ASP页也是用弹出,设定表单的target,点提交时window.open("XXX.asp","_blank"),然后用JS来提交表单,完成后window.close();

简单的说,就是提交表单的时候弹出新窗口,关闭本窗口。对于window.open()打开的窗口怎么后退?能后退到哪里去?

呵呵,罗嗦了一堆废话,知道怎么处理了么?混合运用客户端脚本和服务器端脚本。

jsp重复提交问题

看了网上的,有几种方法:

1 在你的表单页里HEAD区加入这段代码:

<META HTTP-EQUIV="pragma" CONTENT="no-cache"> <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate"> <META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">

2 生成一个令牌保存在用户session中,在form中加一个hidden域,显示该令牌的值,form提交后重新生成一个新的令牌,将用户提交的令牌和session 中的令牌比较,如相同则是重复提交

3 在你的服务器端控件的代码中使用Response.Redirect("selfPage")语句。但是大多的数都不使用这种方法。
方法还有很多。。。

4 、

<input type="button" value="提交">

5 在JSP页面的FORM表单中添加一个hidden域  

<input type="hidden"value=<%=request.getRequestURL()%>>

在你的serverlet(Java代码)中添加如下语句  

String url=request.getParameter("url"); response.sendRedirect(url);

我一般都是采用这样的方法返回JSP页面的,不太明白你说的重复刷新是什么概念 

6 ajax 无刷新提交

7 Web开发中防止浏览器的刷新键引起系统操作重复提交

怎么解决呢?重定向可以解决页面刷新带来的数据的重复提交的问题,我们自然可以利用重定向的方式来解决这个问题。但是struts的action里面mapping.findword();跳转的话,默认的是在工程文件夹里面找要跳转的页面。这种情况,怎么解决呢?

修改struts-config.xml 文件, 在action里面有一个redirect重新定向的属性,struts中默认的是false,添加这个属性,改成true,在forword中写上要跳转页面的绝对或者相对地址就行了

修改如下:

<action-mappings> <action attribute="newsActionForm" input="/addnews.jsp" path="/newsAction" parameter="method" scope="request" type="com.yongtree.news.action.NewsAction"> <forward path="/listnews.jsp" redirect="true"></forward> <forward path="/addnews.jsp"></forward> </action> </action-mappings>

浏览器相关难处理的问题

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wzzjgx.html