将表单提交给 servlet 后,如何在 URL 中保留原始 JSP?

How to keep original JSP in URL after submitting form to a servlet?

我有一个带有表单的 data.jsp 和一个处理该表单的 servlet (/myservlet),return 结果返回 data.jsp

Servlet 包含这部分:

String redir = "/data.jsp";    
ServletContext sc = getServletContext();
RequestDispatcher rd = sc.getRequestDispatcher(redir);
rd.forward(request,response);
return;

有没有办法在 URL 中保留 JSP 而不是 servelt? 例如,

http://example.com/data.jsp 表单提交后 URL 更改为以下内容,同时加载 JSP 内容: http://example.com/myservlet

可不可以让data.jsp一直在URL中,让myservlet根本不会出现在URL中?

您可以进行重定向而不是转发:

response.sendRedirect("data.jsp");

如果您需要使用绝对路径,请记住,使用此方法时,以 / 开头的路径是相对于服务器根目录而不是 webapp 根目录的,因此您需要在上下文路径前加上,例如:

response.sendRedirect(request.getContextPath() + "/data.jsp");

编辑:如果你想在提交表单前后保持相同的URL而不丢失提交的值,这样做会更容易反过来,始终先在 URL 中调用您的 servlet,然后转发到 JSP.

要确定您是处于 "submit" 模式还是仅处于 "display" 模式(空白形式),您可以检查是否存在提交按钮作为参数,例如:

if (request.getParameter("mySaveButton") != null) {
    // Process the submitted form values
    ...
}

这实际上是model-view-controller pattern的基础,其中servlet充当控制器,JSP充当视图。控制器总是首先被调用并将请求转发到适当的视图或 JSP.

根据您提到的,最好使用 ajax。对表单提交进行 AJAX 调用。将数据提交到上述 servlet 和 return 所需的数据。在您的页面上处理此响应。

对于浏览器。在提交时冻结所有表单字段并显示模态等待 gif。删除 ajax 响应事件上的 gif 并显示响应数据。