2012-02-01 61 views
0

这种情况是这样的,我接受用户在网页上的一个unicode字符串,并点击提交按钮控件移动到下一页,其中处理字符串的完整逻辑是通过在bean类内部调用DAO类的函数来将字符串插入到数据库中以便维护日志,同时使用bean类编写。在点击提交按钮时仅插入唯一值

问题在于,当用户刷新结果页面时,bean类会一再地被调用,因此相同的字符串会被同一用户多次插入到数据库中。

我应该怎么做,以便只有当用户在刷新结果页时不按下提交按钮时,同一用户插入的字符串才会插入到数据库中。 或者我应该维护cookie的字符串作为来自用户的值,并在页面加载时检查它。

我试图维持对先前由用户输入的字符串客户端的cookie,并相应检查

private void fnSetCookieValues(HttpServletRequest request, 
           HttpServletResponse response) {   
    Cookie[] cookies=request.getCookies(); 
    for (int i = 0; i < cookies.length; i++) {      
    System.out.println("" + cookies.length + "Name" + cookies[i].getName()); 
    if(cookies[i].getName().equals("DNString")) { 
     System.out.println("Inside if:: " + cookies[i].getValue() + 
         "" + cookies.length); 
     cookies[i].setValue(request.getParameter("txtString")); 
    } else { 
     Cookie ck = new Cookie("DNString", ";"); 
     response.addCookie(ck); 
}   
    } 
} 

这段代码写在小服务程序都会调用上提交按钮点击 但是这个servlet的每个处理都会显示1NameJSESSIONID它没有显示cookie DNString

任何人都可以找出我正在做的错误吗?

回答

0

您正在寻找一种方法来防止双重提交? 有一对夫妇的方法,根据您的安全需要和您所使用的框架:

  1. Java脚本
  2. 令牌
  3. 同步

谷歌了一下周围。那里有很多很多的解决方案。

感谢, 中号

0

这是不检查数据是否已输入不是好办法。 因此,解决此问题的一个简单方法是在您的servlet提交表单后使用HTTP重定向。请致电success.jsp。因此表单不会再提交。

您也可以在获得回复后重置表单。

For More check here