我现在做的是一个jsp+javabean+servlet的系统啊
是用servlet来处理业务逻辑所以地址栏上URL地址上老是停在第一次调用servlet上面
所以如果用户发现这个问题的话他们就可以通过刷新重复的刷新写入数据啊
大家有没有什么好的解决方案呢

解决方案 »

  1.   

    显示表单的时候在session中生成一个随机数<%
    Integer flag=new Integer(rand.nextInt());
    session.setAttribute("flag",flag);
    %>
    <input type=hidden name="flag" value="<%=flag%>">在提交时验证
    Integer flag = new Integer(Integer.parseInt(request.getParameter("flag")));
    if(flag.equals(session.getAttribute("flag")){
      //更新数据
      session.removeAttribute("flag");
    }else{
      //重复提交了,处理代码
    }
      

  2.   

    可以再改进一下,把销毁和新建一个标识放在一起进行
    sessionlistener里sessioncreated方法里session.setAttribute("flag",初始值);生成表单页面时
    <input type=hidden name="flag" value="<%=session.getAttribute("flag")%>">表单处理时
    Integer flag = new Integer(Integer.parseInt(request.getParameter("flag")));
    if(flag.equals(session.getAttribute("flag")){
      //更新数据
      resetFlag();
    }else{
      //重复提交了,处理代码
    }void resetFlag(){
      session.setAttribute("flag",rand.nextInt);
    }
      

  3.   

    struts框架有利用Token(就是楼上所说的随机数)防止重复提交的部分,楼主可以参考一下
      

  4.   

    dreamover(梦醒了) ( ) 信誉:100  2006-8-8 11:58:18  得分: 0  
     
     
       
    显示表单的时候在session中生成一个随机数<%
    Integer flag=new Integer(rand.nextInt());
    session.setAttribute("flag",flag);
    %>
    <input type=hidden name="flag" value="<%=flag%>">在提交时验证
    Integer flag = new Integer(Integer.parseInt(request.getParameter("flag")));
    if(flag.equals(session.getAttribute("flag")){
      //更新数据
      session.removeAttribute("flag");
    }else{
      //重复提交了,处理代码
    }  
     
    这个有个问题就是这样的.
    当用户第一次提交数据的时(没刷新).
    这个时候代码是没问题.
    数据操作完成就removeAttribute()了.
    当用户刷新时,确实不会通过.不过这个时候session.getAttribute("flag")并没有flag了..
    所以程序会报错.
      

  5.   


    可以再改进一下,把销毁和新建一个标识放在一起进行
    sessionlistener里sessioncreated方法里session.setAttribute("flag",初始值);生成表单页面时
    <input type=hidden name="flag" value="<%=session.getAttribute("flag")%>">表单处理时
    Integer flag = new Integer(Integer.parseInt(request.getParameter("flag")));
    if(flag.equals(session.getAttribute("flag")){
      //更新数据
      resetFlag();
    }else{
      //重复提交了,处理代码
    }void resetFlag(){
      session.setAttribute("flag",rand.nextInt);
    }
      这个代码确实避免了程序的报错.
    采用的原理是随即生成的随即数很大程度上是不会相同的.
    不过也要避免.万一你提交后产生的随即数和开始的相同(虽然几率很小.几乎没有.)
    可是程序开发,要做到能避免就避免的.
    所以我觉得在void resetFlag()
    {
    Integer flags=new Integer(rand.nextInt());
       if(flags==flag)
       {
     flags=new Integer(rand.nextInt());
       }
       else
       { 
      session.setAttribute("flag",rand.nextInt);
       }
    }
    楼主做人要厚道,记得结贴给分哦
      

  6.   

    这个有个问题就是这样的.
    当用户第一次提交数据的时(没刷新).
    这个时候代码是没问题.
    数据操作完成就removeAttribute()了.
    当用户刷新时,确实不会通过.不过这个时候session.getAttribute("flag")并没有flag了..
    所以程序会报错.=============================================这儿不会报错的,因为我的session.getAttribute("flag")是在equals()方法里