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

Java 单击“提交”按钮时仅插入唯一值,java,database,jakarta-ee,servlets,Java,Database,Jakarta Ee,Servlets,该场景是这样的:我在网页上接受用户的unicode字符串,单击submit按钮,控件移动到下一页,在下一页中,使用bean类编写处理字符串的完整逻辑,同时通过从bean内部调用DAO类的函数将字符串插入数据库类以维护日志 问题在于,当用户刷新结果页时,bean类会被一次又一次地调用,因此同一用户会多次将同一字符串插入数据库 我应该怎么做,使得由同一用户插入的字符串仅在用户按下提交按钮时插入数据库,而不是在刷新结果页时。 或者我应该用用户提供的字符串作为值来维护cookies,并在页面加载时进行检

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

问题在于,当用户刷新结果页时,bean类会被一次又一次地调用,因此同一用户会多次将同一字符串插入数据库

我应该怎么做,使得由同一用户插入的字符串仅在用户按下提交按钮时插入数据库,而不是在刷新结果页时。 或者我应该用用户提供的字符串作为值来维护cookies,并在页面加载时进行检查

我试图在客户端维护用户先前输入的字符串的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中编写的,在单击submit按钮时会调用它 但是这个servlet的每个处理都会显示1NameJSESSIONID,而不是显示cookie字符串


有人能找出我犯的错误吗?

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

Java脚本 代币 同步 谷歌搜索一下。有很多解决方案

谢谢,
检查数据是否已经输入不是一个好方法。 因此,解决这个问题的一个简单方法是在从servlet提交表单之后使用HTTP重定向。因此,表格不再提交

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