gpt4 book ai didi

java - 防止表单重新提交并在页面刷新时插入数据库

转载 作者:搜寻专家 更新时间:2023-10-31 19:40:11 24 4
gpt4 key购买 nike

我有一个 servlet,它从表单中获取数据并将其插入到数据库中。在 servlet 中,我使用 beans 并通过 beans 获取/设置数据。一旦插入发生,用户将被重定向到显示如下的 View 正是页面 looks.This 页面是 JSP。现在,当我刷新此页面(jsp)时,它再次将表单数据插入到数据库中。现在我需要防止这种情况发生。我想的不是将它重定向到 jsp,而是让我重定向到另一个 servlet,然后从该 servlet 让我执行获取请求并将其转发给 jsp 以供查看。通过这种方法,我重构了我的 jsp,并且我有很多 jsp 将受到影响。

当页面刷新完成时,他们是否有任何其他方法可以防止插入数据库?

我还检查了数据库端,假设我可以添加唯一约束,我确实有一些通过初始 servlet 生成的唯一列,所以每个插入值都不同,所以我不能真正使用数据库端的解决方案。

如果有解决方法,有人可以建议我吗?

更新:添加插入的代码,我正在手动刷新页面。这似乎是我之前错过的错误。它在数据库中正确插入并在 View jsp 中正确显示所有数据。当 View jsp 被刷新,我在数据库中得到了双重插入。

更新。删除了代码。将发布代码的相关部分而不是整个代码。

问题已解决。

 javax.servlet.http.HttpSession session = request.getSession();            
if (session.getAttribute("insertflag") == null) {
mybean sf = new mybean();
sf.insert(form);
session.setAttribute("insertflag", insertid);
RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/test/showtestform.jsp");
rd.forward(request, response);
} else {
RequestDispatcher rd = request.getRequestDispatcher("/errorpage.jsp");
rd.forward(request, response);
}

在错误页面 jsp 中,我删除了属性集,然后在该页面中提供了再次返回主页的链接。

最佳答案

一个简单的解决方法是在 session 中放置一个标志;每当插入完成时......并且在插入之前总是检查 session 是否存在此标志。

在servlet中;在插入数据库之前;进行以下检查:

if (session.getAttribute("recordInsertedSuccessfully") == null )
{
//proceed with insertion
//after inserting into the database we should do :
session.putAttribute("recordInsertedSuccessfully","true");
} else {
//case of form re-submission
}

如果存在用户插入其中两条记录的有效场景的可能性(可能是用户浏览然后再次在同一个表中插入记录;这是一个有效场景);然后我们还需要在向用户显示表单之前添加以下代码:

session.removeAttribute("recordInsertedSuccessfully");

关于java - 防止表单重新提交并在页面刷新时插入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14189545/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com