解决jsp表单重复提交问题

方法一:利用同步令牌(Token)机制来解决Web应用中重复提交的问题

 

这种做法只能是解决问题的一种做法,不过在大型项目中不可能用这种做法,此种做法不能根本解决问题,可以通过重写URL跳过JS校验一样提前到后台去。
一般项目中都是用令牌机制处理这个问题(struts为例)

Struts
Token(令牌)机制能够很好的解决表单重复提交的问题,基本原理是:服务器端在处理到达的请求之前,会将请求中包含的令牌值与保存在当前用户会话中的令牌值进行比较,看是否匹配。在处理完该请求后,且在答复发送给客户端之前,将会产生一个新的令牌,该令牌除传给客户端以外,也会将用户会话中保存的旧的令牌进行替换。这样如果用户回退到刚才的提交页面并再次提交的话,客户端传过来的令牌就和服务器端的令牌不一致,从而有效地防止了重复提交的发生。

  这时其实也就是两点,第一:你需要在请求中有这个令牌值,请求中的令牌值如何保存,其实就和我们平时在页面中保存一些信息是一样的,通过隐藏字段来保存,保存的形式如:input type="hidden"name="org.apache.struts.taglib.html.TOKEN"value="6aa35341f25184fd996c4c918255c3ae"〉,这个valueTokenProcessor类中的generateToken()获得的,是根据当前用户的session id和当前时间的long值来计算的。第二:在客户端提交后,我们要根据判断在请求中包含的值是否和服务器的令牌一致,因为服务器每次提交都会生成新的 Token,所以,如果是重复提交,客户端的Token值和服务器端的Token值就会不一致。下面就以在数据库中插入一条数据来说明如何防止重复提交。

struts1
点麻烦,故此处不提供用例。
struts2
就做得很好,只要是<s:form></s:form>这间加上<s:token/>就可以自动完成重复提交(原理同上

 

 

方法二:js

http://www.ibeifeng.com/bbs/read-htm-tid-13978.html

 

我提供一个简单的方案用JavaScript解决
在表单中写一个隐藏域<input   type="hidden"  value="false"   name="resubmit "/>   
如果第一次提交,就改变value="true"   ;   
再次提交时候,可以用JS 在客户端判断hidde  
   
 
var   resubmit =  false;   
function   checkCFSubmit()   
{   
        if  (resubmit )   
        {   
         return   false;   
        }   
        else   
        {   
          resubmit=   true;   
         return   true;   
}   

然后在<form>中添加onsubmit="javascript:return  checkCFSubmit();"

 

 

 

 

问题1

CSS样式单的基本应用

 

问题2

Dojo的使用,实现动态效果,jar包的引入

 

 

问题3

 

显示时间的js组件,下载使用

 

 

问题以及菜单如何实现层级显示,是属于html标签吗,还是属于表单(有序表单、无序表单)

 

 

问题5  HTML5

 

 

问题6  XML

 

 

问题7  Spring的思想

 

 

问题8 Hibernate的事务控制

 

 

问题9 访问权限控制实现,开发一个小模块,测试一下。

 

 

问题10  安装oracle  找到我的留言板项目,实现BBS 分页,昵称,头像,按照关键词搜索???(搜索引擎有没有现有的开源组件直接借鉴使用,按照用户名搜索用户的留言,管理自己的留言,回复功能。。。。)

你可能感兴趣的:(解决jsp表单重复提交问题)