kxbin
成功留给有准备的人
posts - 10,  comments - 35,  trackbacks - 0
1》防止多次点击“提交”,让多次“提交”变成只一次“提交”
saveToken(rquest)
的目的是页面上的按钮只相应一次,比如说,在页面上有个新增按钮,如果你连续点击数次,后台程序可能会响应n次,加了这句话,在页面
上自动生成一个hidden变量
2》防止页面重复提交
利用同步令牌(Token)机制来解决Web应用中重复提交的问题,Struts也给出了一个参考实现。
  基本原理: 
  服务器端在处理到达的请求之前,会将请求中包含的令牌值与保存在当前用户会话中的令牌值进行比较,看是否匹配。在处理完该请求后
,且在答复发送给客户端之前,将会产生一个新的令牌,该令牌除传给客户端以外,也会将用户会话中保存的旧的令牌进行替换。这样如果用
户回退到刚才的提交页面并再次提交的话,客户端传过来的令牌就和服务器端的令牌不一致,从而有效地防止了重复提交的发生。 
  if (isTokenValid(request, true)) {
  
  // 表单不是重复提交
  
  //这里是保存数据的代码
  
  } else {
  
  //表单重复提交
  
  saveToken(request);
  
  //其它的处理代码
  
  }
 
 
网上例子为证:
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {
        UserForm userForm = (UserForm)form;
        if(!isTokenValid(request)){         
            saveToken(request);
            userForm.setMessage("重复提交");
            return mapping.findForward("failure");
        }
        else{
            resetToken(request);
        }
        request.setAttribute("user", userForm);
        return mapping.findForward("success");
    }
}
模板经典例子:
public ActionForward save(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response)
   throws BaseException {
  if (!isTokenValid(request)) { // 如果指令无效,则属于重复提交
   return (new ActionForward(mapping.getInput()));
  } else {
   resetToken(request);
  }
  BaseDao dao = DAOFactory.getDao(getEntityDAOClassName());
  dao.begingTransaction();
  Class cls = dao.getEntityClass();
  try {
   BaseVO vo = (BaseVO) cls.newInstance();
   
   DataTrans.copyProperties(vo, form);
   this.saveEx(mapping, form, request, response, vo);
   dao.save(vo);
   dao.commitTransaction();
  } catch (Exception e) {
   dao.rollback();
   throw new BaseException("保存数据出现异常");
  } finally {
   dao.sessionClose();
  }
  return mapping.findForward("saveSuccess");
 }
posted on 2011-12-02 09:32 kxbin 阅读(741) 评论(0)  编辑  收藏 所属分类: J2EE

只有注册用户登录后才能发表评论。


网站导航:
 
你恨一个人是因为你爱他;你喜欢一个人,是因为他身上有你没有的;你讨厌一个人是因为他身上有你有的东西;你经常在别人面前批评某人,其实潜意识中是想接近他。

<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用链接

留言簿(5)

随笔档案

文章分类

文章档案

相册

收藏夹

J2EE

java技术网站

Linux

平时常去的网站

数据库

电影网站

网站设计

搜索

  •  

最新评论

阅读排行榜

评论排行榜