我有一个带有表单的data.jsp和一个处理该表单并将结果返回到data.jsp 的servlet(/mservlet)
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中了?
您可以执行重定向而不是转发:
response.sendRedirect("data.jsp");
如果您需要使用绝对路径,请记住,使用此方法,以/
开头的路径相对于服务器根,而不是webapp根,因此您需要预先准备上下文路径,例如:
response.sendRedirect(request.getContextPath() + "/data.jsp");
编辑:如果您想在提交表单前后保持相同的URL而不丢失提交的值,那么换一种方式会更容易,总是先在URL中调用servlet,然后转发到JSP。
要确定您是处于"提交"模式还是仅处于"显示"模式(空白表格),您可以检查是否存在提交按钮作为参数,例如:
if (request.getParameter("mySaveButton") != null) {
// Process the submitted form values
...
}
这实际上是模型-视图-控制器模式的基础,其中servlet充当控制器,JSP充当视图。控制器总是首先被调用,并将请求转发到适当的视图或JSP。
根据您所提到的,最好使用ajax。对表单提交进行AJAX调用。将数据提交到上面的servlet并返回所需的数据。在您的页面上处理此响应。
对于浏览器。提交时冻结所有表单字段,并显示一个模式等待gif。删除gif on ajax响应事件并显示响应数据。