我有一个 servlet,它从表单中获取数据并将其插入到数据库中。在 servlet 中,我使用 bean 并通过 bean 获取/设置数据。一旦插入发生,用户将被重定向到显示页面精确度的视图看起来。这个页面是JSP。现在,当我执行此页面刷新(jsp)时,它再次将表单数据插入到数据库中。现在我需要防止这种情况发生。我想的是而不是将其重定向到 jsp,让我重定向到另一个 servlet 并从该 servlet 让我执行 get 请求并将其转发给 jsp 以供查看。通过这种方法,我重构了我的 jsp,并且我有很多 jsp 会受到影响。
当页面刷新完成时,他们有什么其他方法可以防止插入数据库吗?
我还检查了数据库端,假设我可以添加唯一约束,我确实有一些通过初始 servlet 生成的唯一列,所以每个插入值都是不同的,所以我不能真正在数据库端使用解决方案。
如果有解决办法,有人可以建议我吗?
更新:添加插入的代码,我正在手动刷新页面。似乎这是我之前错过考虑的错误。它在数据库中正确插入并在视图 jsp 中正确显示所有数据。当视图 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 中,我删除了属性集,然后在该页面中提供链接以再次返回主页。