【问题标题】:Refreshing a JSP form resubmits the data刷新 JSP 表单会重新提交数据
【发布时间】:2015-01-29 10:20:52
【问题描述】:

我有一个名为patient.jsp 的jsp 页面,其中Form 是一个弹出窗口。此表单使用post 方法提交。 一旦这个表单到达 servlet,就会发生类似下面的事情。

request.setAttribute("id",id);
RequestDispatcher dispatch = getServletContect().getRequestDispatcher("/patient.jsp");
dispatch.forward(request,response);

有一个大问题。一旦转发回patient.jsp,如果用户刷新网页,他之前输入表单的所有内容都将重新提交并保存在数据库中。

我们使用RequestDispatcher 因为我们必须从请求范围传递一个属性。知道如何解决这个问题吗?

【问题讨论】:

    标签: java jsp servlets web requestdispatcher


    【解决方案1】:

    首先你应该重定向而不是转发:

    response.sendRedirect("patient.jsp");
    

    确保相对路径正确。

    从这里你有两个选择:

    1. session中设置属性而不是在请求中,然后可以在jsp中获取。当然你需要使用它来处理并行请求,所以属性的名称每次都应该是唯一的。
    2. 将属性作为http get参数发送(如果它是可序列化的):response.sendRedirect("patient.jsp?id=273");

    【讨论】:

    • 关于选项 1:我认为我们不必每次都使用唯一的名称。因为如果我们将带有键 id 的值附加到同一会话中,并且如果我们将带有键 id 的另一个值重新附加到同一个会话,那么之前的属性将被替换,对吧?
    • 你是对的。我的意思是,如果用户以某种方式同时发送两个请求(不是常见的情况,但可能),id 属性将被设置两次并且对于两个响应都是相同的。一个经典的同步问题。我会使用id_<UUID> 之类的密钥并将 UUID 作为 get 参数传递给页面。
    猜你喜欢
    • 1970-01-01
    • 2016-05-14
    • 1970-01-01
    • 2011-08-14
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    相关资源
    最近更新 更多