有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在将表单提交到servlet后将原始JSP保存在URL中?

我有一份数据。带有表单和servlet(/myservlet)的jsp,该servlet处理该表单并将结果返回给数据。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

是否可以保存数据。jsp一直在URL中,这样myservlet就不会出现在URL中了


共 (2) 个答案

  1. # 1 楼答案

    正如您所提到的,最好使用ajax。在表单提交时进行AJAX调用。将数据提交到上述servlet并返回所需的数据。在页面上处理此响应

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

  2. # 2 楼答案

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

    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
        ...
    }
    

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