- 浏览: 562644 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (411)
- webservice (3)
- oracle (37)
- sqlserver (8)
- j2ee (56)
- linux (7)
- javaweb (47)
- office (1)
- struts (23)
- hibernate (11)
- spring (29)
- 网络 (2)
- tomcat (13)
- tongweb (0)
- weblogic (0)
- powerdesiginer (3)
- svn (3)
- js (20)
- ie (2)
- 编译 (3)
- css (2)
- 操作系统 (5)
- Android (41)
- jbpm4.3 (1)
- fckeditor (3)
- 操作excel (2)
- db2常用命令 (1)
- ibatis (5)
- mysql (16)
- 表达式语言 (1)
- java方式调用存储过程 (1)
- ca (1)
- linux客户端 (1)
- 电子数码 (1)
- 行业应用 (12)
- 开发工具 (4)
- 面试 (1)
- 计算机原理 (1)
- NOSQL (5)
- 虚拟机 (1)
- nginx (0)
- velocity (2)
- jndi (1)
- spring mvc (39)
- springmvc (32)
- 安全 (5)
- htmleditor (6)
- iphone4 (1)
- html (4)
- jstl (2)
- ckeditor (5)
- 连接池 (1)
- jquery (6)
- 分页 (1)
- 技术研发规则 (1)
- javamail (1)
- maven (2)
- upload (1)
- log (1)
- 测试 (10)
- spring roo (1)
- 版本控制 (2)
- find bugs (0)
- jsf (0)
- springroo (0)
- 小道理 (1)
- 小道理,技术标准 (1)
- jsf (0)
- bitbao (2)
- redmine (3)
- 团队意识 (1)
- mybatis (2)
- jquery mobile (1)
- flexpaper (0)
- json (4)
- URLRewriteFilte (1)
- html5 (1)
- 都乐保活动 (0)
- openfire (0)
- TreeMap (1)
- build (0)
- javaweb,tag (0)
- algorithm (1)
- tag (2)
- 扯淡 (0)
- mac (2)
- 叶一火(老一) (1)
- 游玩 (1)
- 编码 (1)
- 上线部署 (0)
- 研发管理 (0)
- thumbnailator (2)
- 旅游 (0)
- bingweibo (1)
- 杂谈 (4)
- ktv (1)
- weibo (1)
- 爱情 (2)
- 饮食 (1)
- MediaWiki (1)
- git (1)
- 版本库 (1)
- servlet (1)
- 感悟 (1)
- 人生 (1)
- highcharts (1)
- poi (0)
- websphere (0)
- php (1)
最新评论
-
woshixushigang:
good
org.springframework.beans.TypeMismatchException: Failed to convert property valu -
nathanleewei:
org.springframework.jdbc.core.B ...
org.springframework.beans.TypeMismatchException: Failed to convert property valu -
浪禾木:
请问是ckeditor\contents.css吗?改过以后 ...
ckeditor自动换行问题 -
simusuishi:
刚哥威武!
ckeditor取值赋值问题 -
a455642158:
收割完毕……
Android开源项目源码下载(不断更新中)
防止重复提交java解决 (转载)
B/S结构的软件开发中,特别是在越大型的分布式应用中体现的越明显,后端的处理往往会因为出现较多的时间消耗而引起延迟,这种延迟有可能过长而最终使用户认为是自己的操作错误,导致他们重新提交请求,由于任务的重复提交,服务器资源大部分被占用,情节严重可能出现类似死机现象。
预期达到目标:
预期达到目标:
1、当用户进行的是Refresh/Reload/Back/Forward操作、以及先Back再Submit操作时,仅仅是reloading先前的结果页。
2、当用户重复提交同一个任务操作时,后台服务接收并处理第一次提交的任务,后面提交不起作用(不转向也不提示)。
3、该功能具有公用性。
基本形成思路:
1、在basic filter中实现公用性
if(true){//问题1:如何确定是否为重复提交
...
chain.doFilter(request,response);
}else{
//问题2:如何实现不转向、不提示也不显示空白页
}
2、网上资料概括
a、提交表单后按钮变灰/隐藏提交按钮
b、在js里设置全局变量,提交后修改该变量的值,依据变量的值判断是否重复提交
var flag=true;
function checkForm(){
if (flag==false){
return;
}
flag=false;
document.form1.submit();
}
c、struts (webwork没有找到这个资料)
//验证事务控制令牌,<html:form >会自动根据session中标识生成一个隐含input代表令牌,防止两次提交
在action中:
//<input type="hidden" name="org.apache.struts.taglib.html.TOKEN" value="6aa35341f25184fd996c4c918255c3ae">
if (!isTokenValid(request))
errors.add(ActionErrors.GLOBAL_ERROR,
new ActionError("error.transaction.token"));
resetToken(request); //删除session中的令牌
action有这样的一个方法生成令牌华
protected String generateToken(HttpServletRequest request) {
HttpSession session = request.getSession();
try {
byte id[] = session.getId().getBytes();
byte now[] =
new Long(System.currentTimeMillis()).toString().getBytes();
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(id);
md.update(now);
return (toHex(md.digest()));
} catch (IllegalStateException e) {
return (null);
} catch (NoSuchAlgorithmException e) {
return (null);
}
}
d、用户使用浏览器时,可以经常使用向后的按钮,因此就有可能重复提交一个他们已经提交过的form,这样就会带来一个重复事务处理的问题。同样,一个用户也可能在接收到一个确认的页面之前按下停止的按钮,接着再次提交同一个form。对于这些情况,我们都想跟踪并且禁止这些重复的提交,我们可以使用一个控制servlet来提供一个控制点,以解决这个问题。
同步记号(Synchronizer (or Dvu) Token)
这个策略是为了解决重复的form提交问题。一个同步的记号被设置在一个用户的Session中,并且包含在返回到客户的每一个form中。当form被提交时,form中的同步标记就和Session中的同步标记作对比。在form首次提交的时候,这两个标记应该是一样的。如果标记不一样,那么该form就会禁止提交,一个错误就会返回给用户。在用户提交一个form时,如果按下浏览器中的后退按钮并尝试重新提交同一个form时,标记就会出现不匹配的现象。
另一方面,如果两个标记值匹配,那么我们就可以确信整个流程是正确的。在这种情况下,
另一方面,如果两个标记值匹配,那么我们就可以确信整个流程是正确的。在这种情况下,Session中的标记值就会被修改为一个新的值,同时允许提交该form。
另一方面,如果两个标记值匹配,那么我们就可以确信整个流程是正确的。在这种情况下,Session中的标记值就会被修改为一个新的值,同时允许提交该form。
你也可以使用这个策略来控制对某些页面的直接访问,就好象上面资源保护中描述的一样。例如,假设一个用户将某个应用的页面A收藏到收藏夹中,而页面A只允许通过页面B和C访问。当用户直接通过收藏夹来访问页面A,这时页面的访问顺序就是不正确的,这样同步标记将处在一个不同步的状态,或者它根本就不存在。不论怎样,访问都被禁止了。
e、做一个hidden框,名字自己定,提交后得到这个值放入session,提交前判断session是否为空
解决方案:
1、后台公共类中实现前台的Form中自动生成两个hidden文本功能,一个是作page是否重复提交判断,并由系统自动附上关键值(如struts采用的方案);另一个作为button是否重复提交判断(struts中好像没有)。由后台公共类实现界面两个hidden text自动生成的好处在于公用性。
2、在basic filter中根据两个hidden text值判断是否为重复提交。
3、javascript中作一个公共方法,实现功能:如果需要判断是否重复提交,就给第二个hidden text附上关键值,并使该功能不可用。
.
个人感想:
我相信未来该功能一定会被服务器集成,而不再由开发人员进行编码
发表评论
-
eclipse codestyle和formate
2011-12-26 11:20 1025北京都乐宝软件信息技术公司的代码风格 -
Common-logging 与 Log4j的结合使用
2011-12-25 15:58 1165转自:http://hi.baidu.com/suofang/ ... -
ssh整合(转)
2011-09-06 14:50 1244终于,终于将SSH整合成 ... -
struts1学习体会
2011-08-27 22:25 862ZT:http://blog.csdn.net/toyouhe ... -
struts1例子
2011-08-27 22:16 1618最近一直再做struts2的项目,一年前做的struts1林业 ... -
struts异常处理机制
2011-08-22 23:11 1068在xwork中,package的定义中增加了global-ex ... -
struts.xml及default-action-ref详解
2011-08-22 17:54 2061我想实现访问一个acion时候,如果这个action不存在, ... -
struts2防止重复提交
2011-08-08 14:42 1191本人负责全国林业行政执法人员管理系统,当时遇到了新增重复提交问 ... -
struts2的sruts-default.xml解释
2011-08-08 14:20 977这个文件是struts2框架默认加载的配置文件。它定义st ... -
struts.xml详解
2011-08-08 11:10 781<?xml version="1.0& ... -
Unable to find 'struts.multipart.saveDir' property setting.
2011-08-08 10:23 1583以前在项目中遇到Unable to find 'struts. ... -
struts2标签中限制文本域字数
2011-05-20 16:51 1561实现textarea限制输入字 ... -
实现textarea限制输入字数
2011-05-20 15:47 1001实现textarea限制输入字 ... -
struts2接收字符日期存到数据库
2011-05-18 10:54 1347模拟51job招聘网站出现的小插曲。 1、注册时候的信 ... -
struts2 JSON插件怪异的问题
2011-03-10 14:05 940private FenleiBizIntf fenleiBiz ... -
各种错误集锦(更新中。。。)
2011-03-01 21:32 914struts2中 根据一个条件查询表时候,如果数据库中没有此数 ... -
struts2的action中默认不会初始化属性,也不会实例化属性
2011-02-19 14:27 1584编写jdbc分页时易出现的马虎。 public St ... -
The Struts dispatcher cannot be found. This is usually caused by using Struts ta
2011-02-08 21:05 1187The Struts dispatcher canno ... -
STRUTS2返回类型
2010-12-26 01:40 798STRUTS2返回类型开始使用struts2的时候,想跳转到另 ... -
STRUTS2返回类型
2010-12-26 01:40 1015STRUTS2返回类型 开始使用struts2的时候,想跳转 ...
相关推荐
防止重复提交的总要解决方案 相信对struts的学者有帮助 大家看看
造成重复提交主要的两个原因: 1) 一是,服务器处理时间久。当用户在表单中填完信息,点击“提交”按钮后,由于服务器反应时间过长没能及时看到响应信息,或者出于其它目的,再次点击“提交”按钮,从而导致在...
这里是Struts2 中放置表单重复提交的例子。
struts2 防止 重复 提交 和 等待 画面
struts2防止表单重复提交,利用struts的拦截器tokenSession,轻轻松松解决表单重复提交的问题。 附件为源代码,后台延迟了3秒,可直接在web服务器下部署运行,输入用户名和密码后,多点几次提交按钮,然后看控制台...
struts2防止重复登录,分享给大家学习一下。
Struts2 防重复提交Demo 利用Struts2自带的s:token写的防数据重复提交策略.
struts2防止表单重复提交--重定向
客户端跳转时用HttpservletResopse对象的sendRedirect函数实现,服务器端跳转是使用RequestDispather对象的forward方法实现的。这两者之间的区别主要体现在三个方面.......
【原创】Struts2防止表单重复提交.doc
JavaEE Struts2利用tokenSession防止重复提交
由于struts2标签的性能不好,但是如果用struts2自带的拦截器防止重复提交又必须struts标签,所以只好自定拦器实现
由于struts2标签的性能不好,项目组决定不使用,但是如果用struts2自带的拦截器防止重复提交又必须struts标签,所以只好自定拦器实现
防止表单重复提交 token eclipse项目
NULL 博文链接:https://clw.iteye.com/blog/301343
自己写的一个简单地利用struts2实现的登陆项目 另外附有拦截器防止重复提交 希望能对初学者有很所帮助
在点击"提交"后,我们通常会弹出一个提示信息的页面,用户此时有可能会按f5刷新当前提交的action,从而将多个相同的数据保存到了后台数据库,并且造成了潜在的安全危险! 如何避免重复提交呢?
专门为struts打造的,有效的防止重复提交,并且操作起来相当方便……
Struts2自定义拦截器实现防止重复提交