jsp表单在不改变页面的情况下将数据发送到servlet

时间:2015-06-16 07:35:50

标签: java jsp servlets

我使用jsp + servlets并有一个表单。如何在不离开包含表单的实际页面的情况下将表单数据发送到servlet(到doPost()方法)?

我想按下“提交”按钮,应该发送数据,我想仍然保留在带有表单的页面上。我宁愿不使用javascript。

我在http://localhost/myproject/

<form action="http://localhost/myproject/anotherpage" method="POST">
First Name: <input type="text" name="first_name">
<br />
Last Name: <input type="text" name="last_name" />
<input type="submit" value="Submit" />
</form>

点击提交按钮后,我会转到以下页面:http://localhost/myproject/anotherpage

但我想继续留在

http://localhost/myproject/

编辑:现在我要写

request.getRequestDispatcher("/index.jsp").forward(request, response);

在doPost()方法中

5 个答案:

答案 0 :(得分:5)

我建议你不要转发到第二页的初始页面,而是重定向到它以便跟随Post-Redirect-Get pattern

如果不这样做,用户将在其URL栏中看到他发布数据的页面的地址,如果他点击后退按钮,他将收到重复提交帖子的丑陋信息。

所以在doPost()方法只是为了:

response.sendRedirect("/back/to/your/page");

作为替代方案,您可以隐藏 servlet后面的JSP页面,并让servlet直接转发到JSP页面以获取GET请求,并且执行其工作对于POST,然后转发到JSP或重定向到自己。在这种情况下,您不会在<form>标记中设置任何操作以将数据发布到相同的网址。

由于它会保留相同的网址,您最终可以直接进行转发,但我仍然建议您重定向以避免后退按钮问题。

答案 1 :(得分:4)

在你的servlet上,定义你想要返回的jsp。

RequestDispatcher requestDispatcher = req.getRequestDispatcher("/path/to/your/jsp");
    requestDispatcher.forward(req, res);

如果您要在不刷新当前页面的情况下发送数据,您可能需要查看发送ajax请求。

答案 2 :(得分:4)

您的 JSP

中应该有一个包含 method =“POST”的表单
    <form method="post">
        <input type="number" name="number1" id="number1" />
        +
        <input type="number" name="number2" id="number2" />

        <input type="submit" />
    </form>

然后在 servlets 中,在 doPost 方法中,您必须使用 getParameter(“name”)获取表单的参数,做你想做的事情,然后重新发送到你的JSP( setAttribute )。 不要忘记链接与您的jsp(我的示例的最后一行)

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String textNumber1 = request.getParameter("number1");
        String textNumber2 = request.getParameter("number2");
        int number1 = (!textNumber1.isEmpty() ? Integer.parseInt(textNumber1) : 0);
        int number2 = (!textNumber2.isEmpty() ? Integer.parseInt(textNumber2) : 0);
        int result = number1 + number2;

        request.setAttribute("result", Integer.toString(result));

        request.setAttribute("number1", Integer.toString(number1));
        request.setAttribute("number2", Integer.toString(number2));

        this.getServletContext().getRequestDispatcher("/WEB-INF/calc.jsp").forward(request, response);
    }

最后在 JSP 上,从 getAttribute

获取要在同一页面上显示的servlet中的属性
<%
    String number1 = (String) request.getAttribute("number1");
    String number2 = (String) request.getAttribute("number2");
    String result  = (String) request.getAttribute("result");

    if (number1 != null && number2 != null && result != null) {
        out.print(String.format("<p>Result of %s + %s = <strong>%s</strong></p>", number1, number2, result));
    }
%>

此示例是一个小计算器,显示表单同一页面上number1 + number 2的结果;)

答案 3 :(得分:1)

这不会让您留在表单页面上,但会立即将您重定向回来。当然,您可以使用刚刚输入的值。

JSP表单

<form method="post" action="yourServlet">

Servlet(在doPost()中)

getServletContext().getRequestDispatcher("/back/to/your.jsp").forward(request, response);

答案 4 :(得分:-1)

您可以使用javascript和ajax(XMLHttpRequest),或指定表单的目标,引用隐藏的iframe。