刷新 JSP 表单会重新提交数据
Refreshing a JSP form resubmits the data
我有一个名为 patient.jsp
的 jsp 页面,其中有一个 Form
弹出窗口。此表单使用 post
方法提交。
一旦此表单到达 servlet,就会发生类似下面的事情。
request.setAttribute("id",id);
RequestDispatcher dispatch = getServletContect().getRequestDispatcher("/patient.jsp");
dispatch.forward(request,response);
有个大问题。一旦转发回 patient.jsp
,如果用户刷新网页,他之前输入表单的所有内容将被重新提交并保存在数据库中。
我们使用了RequestDispatcher
,因为我们必须从请求范围传递一个属性。知道如何解决这个问题吗?
首先你应该重定向而不是转发:
response.sendRedirect("patient.jsp");
确保相对路径正确。
从这里你有两个选择:
- 在
session
中设置属性,而不是在请求中设置,那么您可以在jsp中获取它。当然你需要使用这个来处理并行请求,所以每次属性的名称应该是唯一的。
- 将属性作为 http get 参数发送(如果它是可序列化的):
response.sendRedirect("patient.jsp?id=273");
我有一个名为 patient.jsp
的 jsp 页面,其中有一个 Form
弹出窗口。此表单使用 post
方法提交。
一旦此表单到达 servlet,就会发生类似下面的事情。
request.setAttribute("id",id);
RequestDispatcher dispatch = getServletContect().getRequestDispatcher("/patient.jsp");
dispatch.forward(request,response);
有个大问题。一旦转发回 patient.jsp
,如果用户刷新网页,他之前输入表单的所有内容将被重新提交并保存在数据库中。
我们使用了RequestDispatcher
,因为我们必须从请求范围传递一个属性。知道如何解决这个问题吗?
首先你应该重定向而不是转发:
response.sendRedirect("patient.jsp");
确保相对路径正确。
从这里你有两个选择:
- 在
session
中设置属性,而不是在请求中设置,那么您可以在jsp中获取它。当然你需要使用这个来处理并行请求,所以每次属性的名称应该是唯一的。 - 将属性作为 http get 参数发送(如果它是可序列化的):
response.sendRedirect("patient.jsp?id=273");