继往开来 吐故纳新
日历
网志分类
· 所有网志 (990)
· 个人作品 (62)
· 软件设计 (33)
· 面向对象编程 (22)
· JavaAPI (39)
· Java开源工具 (31)
· Swing (34)
· Java语法细节 (39)
· 样式表CSS (12)
· XML (10)
· J2EE(JavaEE) (23)
· 算法数据结构 (64)
· 正则表达式 (4)
· 软件知识 (6)
· Java线程 (9)
· Web开发.Jsp/Servlet/Struts (20)
· 程序随想录 (7)
· Spring (5)
· Hibernate (7)
· J2SE 高级 (2)
· J2SE 高级 (0)
· Web开发.Ajax (16)
· Web开发.JavaScript (43)
· DB4O (2)
· Web开发.CSS/Html (22)
· C# (20)
· ERP (4)
· JDBC (1)
· 编程资源 (16)
· 编程感悟 (29)
· DB/Sql (13)
· VB (29)
· VC (2)
· 桌面脚本 (3)
· 新兴软件 (3)
· 英语学习 (21)
· 网文转载 (159)
· 职场风云 (39)
· 诗词歌赋 (32)
· 生活感言 (77)
· 奇文共赏 (13)
· 财经纵横 (6)
· 未分类 (11)
站内搜索
友情链接
· 歪酷博客
· 我的歪酷 非非共享界
· 偶要雷锋
· 豆瓣
· nczonline
· 当当网
· easyjf中文站
· Donews
· 天极Java文章列表
· W3CSchool
· taiten的BLOG
· Dojo中国
· Dojo
· Extjs.com
· Lifehack中文网志
· JaveEye的一个AS专题
· Banq's JDon
· Java 中文网址大全
· 梦想Java
· 360Doc个人图书馆
· java开源大全
· 我在硅谷动力的软件下载站
· 站长中国
· 随意贴
· CSS教学素材站
· java 参考中文站
· 面向构件与SOA社区
· 彩字生成
· 派派小说论坛
· 如坐春风
· 英语学习网
· BBC CHina
· www.dlbang.com
· 古文竖排格式在线转化工具
· 免费家谱
· 图片上传基地
· 风景壁纸
· 和风细雨
· MyC#BlogInCsdn

订阅 RSS

0207382

歪酷博客

开此博一为经验积累,二为资料收集,三为同道交流,四为资源共享.
« 上一篇: 【翻译】如何使用JTable 下一篇: 【翻译】java.lang包API »
Junglesong @ 2007-02-28 14:45

出处:http://www.jeedev.com/blog/article.asp?id=182

如果用户对一个html表单多次提交,web应用应该能够判断用户的重复提交行为,并作出相应的处理。

最常见的是新增一条数据,用户已经提交表单并且服务器端已经完成新增成功。此时用户可能有两个误操作:
1.用户通过浏览器的后退功能,返回到录入页面,重复提交(此时浏览器提供回退功能基本上是个邪恶行为)
2.刷新该页面(因为新增成功的提示页面通常是通过请求转发(forward)过来的,所以此操作实际效果通常等同于1)

这样造成的可能结果有:
1.若程序级别和数据库级别限制了重复记录,会提示类似于“xxx字段已存在,请修改后重新保存”的信息
2.若没有此限制,服务器端会再插入一条数据,而这通常不是用户想要的

误操作2和可能结果2的结合就达成了与用户意图相背的结果:服务器端不停地在增加重复记录,用户认为自己只不过是刷新该提示信息页面。

通用的解决思路是:
用户请求录入页面,这个与服务器建立的一次连接过程中,在服务器端①【生成一个session标识,同时返回到客户端一个与此匹配的hidden域】。用户提交了此页面,服务器端首先②【判断此hidden域与session标识是否匹配】,若不匹配,终止保存操作,提示同一表单不能提交两次,同时①【新建一个session标识和hidden域】,返回录入页面;若匹配,执行插入保存操作,同时③【清空(重置reset)session标识】。

Struts正在基于这样的思路在org.apache.struts.action.Action类中提供了内置支持方法:
java代码:

protected void saveToken(HttpServletRequest request) 配合标签对应于①
protected boolean isTokenValid(HttpServletRequest request) 对应于②
protected void resetToken(HttpServletRequest request) 对应于③

这样我们在写程序的时候,结合Struts的html标签,只要
1.在forward到insert.jsp页面前加一个action执行saveToken(request)操作,或干脆在insert.jsp中写
2.保存前加个判断操作isTokenValid(request)
3.若isTokenValid(request)返回false,执行saveToken(request)操作,返回错误提示页面;true则执行resetToken(request)操作,然后进行实际的保存操作

我的代码


// 进入创建前的Action
public final class EnterNewProjectPageAction extends Action {
        public ActionForward execute(ActionMapping mapping, ActionForm form,
                        HttpServletRequest request, HttpServletResponse response)
                        throws Exception {       
               
                saveToken(request);
               
                return (mapping.findForward("createproject_jsp"));
        }
}

// 创建Action
public final class CreateProjectAction extends Action {
        public ActionForward execute(ActionMapping mapping, ActionForm form,
                        HttpServletRequest request, HttpServletResponse response)
                        throws Exception {       

               
                if(isTokenValid(request)){
                        resetToken(request);
                       
                        CreateProjectForm createProjectForm=(CreateProjectForm)form;       
                        Project newProject=createProjectForm.getProject();
                       
                        newProject.setCreateTime(Util.getCurrTime());
       
                        ProjectService.create(newProject);       
                       
                }
                else{
                        saveToken(request);
                        System.out.println("重复提交");
                }               
       
                ProjectUtil.setupPages(0,request);
                return (mapping.findForward("projects_jsp"));
        }
}



评论 / 个人网页 / 扔小纸条
* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 


 

分类小组论坛
杂谈 , 娱乐、八卦 , 文学、艺术 , 体育 , 旅游、同城 , 象牙塔 , 情感 , 时尚、生活 , 星座 , 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定