单击提交按钮时仅插入唯一值

时间:2012-02-01 06:29:12

标签: java database java-ee servlets

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

问题是,当用户刷新结果页面时,会反复调用bean类,因此同一个用户会多次将相同的字符串插入数据库。

我该怎么办,只有当用户在刷新结果页面时没有按下提交按钮时,同一用户插入的字符串才会被插入到数据库中。 或者我应该使用字符串作为来自用户的值来维护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编写的,在提交按钮点击时调用 但是这个servlet的每个处理都显示 1NameJSESSIONID 它没有显示cookie DNString

有人可以弄清楚我在做什么错吗?

2 个答案:

答案 0 :(得分:0)

您正在研究防止双重提交的方法吗? 根据您的安全需求和您使用的框架,有几种方法:

  1. Java脚本
  2. 令牌
  3. 同步
  4. 谷歌有点左右。那里有很多解决方案。

    谢谢, 中号

答案 1 :(得分:0)

检查数据是否已输入是不好的方法。 因此,解决此问题的一个简单方法是在servlet提交表单后使用HTTP重定向。让我们说success.jsp。因此,表格不会再次提交。

您还可以在收到回复后重置表单。

For More check here