1. 什么是表单的重复提交? 前提: 在控制器中相应页面的形式为页面的转发而不是重定向.
1). 若刷新表单页面后, 再提交表单不算重复提交. 除此之外都算为表单的重复提交.
2). 在不刷新表单页面的前提下:
①. 多次点击提交按钮
②. 已经提交成功, 然后点击 "刷新(F5)"
③. 已经提交成功, 按 "回退" 之后, 再点击 "提交按钮".
2. 重复提交由什么缺点:
1). 加重了服务器的负担.
2). 可能导致错误操作.
3. 解决方案:
1). 在页面上使用 js --> 禁止多次点击 "提交按钮". 可以解决 ①
2).利用 session 解决服务器端的重复提交问题.
①. 不能使用 request 解决重复提交, 因为当前页面刷新以后 request 生命周期结束, 不能把 request 中的属性带到 Action 中.
②. 具体步骤:
-->页面上, 在 session 中放置一个Token
<%
org.apache.struts.util.TokenProcessor.getInstance().saveToken(request);
%>
-->在 action 中检验该属性是否存在, 若存在(说明是第一次请求) 清除该属性, 受理请求
->若在 action 中该属性是不存在, 说明该属性已被清除, 拒绝请求.
if(TokenProcessor.getInstance().isTokenValid(request)){
TokenProcessor.getInstance().resetToken(request);
}else{
// 表单重复提交 ,拒绝请求。
}
// 正常请求
此贴为javaeye中朋友的贴,经本人验证的确有效,现本人把自己在项目中遇到过的此类问题的代码及其相关文件说明上传到此,希望能帮助更多的朋友轻松解决此问题
分享到:
相关推荐
Struts1.x常用的开发包,需要学习struts1.x朋友可以下载
struts1.x和struts2.x区别
freemarker与struts 1.x 结合,生成html 在http://blog.csdn.net/chen1255 的web中有详细描述关于freemarker与struts1.x的结合
在这里,通过一个小例子稍微总结了下struts1和struts2的区别,希望这个能帮助到初学struts的朋友
Struts 2.x权威指南(第3版)
java Struts 1.x 框架 Web 开发 java Struts 1.x 框架 Web 开发
Struts1.x的登录示例,Struts1.x相关详细教程参考我的Blog:http://blog.csdn.net/boyazuo
struts1.x入门教程
struts1 国际化 源代码 struts1 国际化 工程
struts1.x多文件上传, 感觉不错.
struts1.x apps 所有最新的Struts1.x项目应用 struts1.x apps 所有最新的Struts1.x项目应用 欢迎大家下载。。。
适用于Struts1.x初学者(网摘共25节)
这是struts1.x标签! struts1.x是历经考验的成熟的框架! 此标签可以帮助你更好的学习struts1.x的标签!
Struts1.x-Jdbc,学习Struts1.的曾删改查
struts1.x和mysql整合的登陆例子,包括用户的增删改查,涉及到LookupDispatchAction,的多个submit提交,静态验证,和读取数据库properties文件
基于Struts1.x的简单电子商务系统,hiberntae实现数据的持久化,数据库是Mysql
struts1.x入门.pdf ,感觉写得还不错
struts1.x 学习总结 struts1.x 学习总结 struts1.x 学习总结 struts1.x 学习总结
struts1.x 详解,基本涵盖struts1.x的所有常用知识,强烈推荐!