我有一个带表单的data.jsp和一个servlet(/ myservlet)处理该表单并将结果返回给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 在表单提交后,在加载JSP内容时,URL将更改为以下内容: http://example.com/myservlet
是否可以始终将data.jsp保存在URL中,以便myservlet根本不会出现在URL中?
答案 0 :(得分:1)
您可以执行重定向而不是转发:
response.sendRedirect("data.jsp");
如果您需要使用绝对路径,请记住,使用此方法时,以/
开头的路径相对于服务器根目录而不是webapp根目录,因此您需要预先添加上下文路径,例如:
response.sendRedirect(request.getContextPath() + "/data.jsp");
编辑:如果您希望在提交表单之前和之后保留相同的网址而不会丢失提交的值,那么反过来会更容易,并且始终首先调用您的servlet在URL中,然后转发到JSP。
要确定您是处于“提交”模式还是仅处于“显示”模式(空白表格),您可以检查是否存在提交按钮作为参数,例如:
if (request.getParameter("mySaveButton") != null) {
// Process the submitted form values
...
}
这实际上是model-view-controller pattern的基础,其中servlet充当控制器,JSP充当视图。始终首先调用控制器,并将请求转发到适当的视图或JSP。
答案 1 :(得分:0)
通过你提到的,使用ajax是最好的选择。在表单提交上进行AJAX调用。将数据提交到上面的servlet并返回所需的数据。在您的页面上处理此回复。
对于浏览器。在提交时冻结所有表单字段并显示模态等待的gif。删除ajax响应事件上的gif并显示响应数据。