0

我有一个 servlet 做一些事情,当它完成后将一些事情放入请求中,然后调用另一个 servlet,该 servlet 又调用一个 jsp 页面。我写代码:

第一个 servlet (InserisciLezione)

            request.getRequestDispatcher("/TakeDates").forward(request, response);

第二个 servlet (TakeDates)

 RequestDispatcher dispatcher = request
            .getRequestDispatcher("GestioneCalendario.jsp");
    dispatcher.forward(request, response);

这可以正常工作,但问题是在页面的 url 中我还没有:

 http://localhost:8080/Spinning/InserisciLezione?data=20-02-2013

如果我刷新页面,第一个 servlet 会再次被调用,我不想要这个。我想拥有

 http://localhost:8080/Spinning/GestioneCalendario.jsp

为什么?提前致谢!

4

3 回答 3

2

如果我的记忆很好(我已经很长时间没有使用原始 servlet),那么您应该使用重定向而不是转发。

您可以使用 response.sendRedirect(url) 方法。

干杯,

于 2013-02-13T11:13:17.527 回答
2

您可以使用sendRedirect而不是forward

向前

  1. 转发发生在服务器端,服务器将相同的请求转发到另一个资源。
  2. 在这种情况下,相同的请求被转发到另一个资源,因此所有请求参数和请求属性都将可用,没有 req,ans resp servlet1 的对象,您无法获取 ser1 和 ser2 的值
    注意:
    转发需要调用在响应提交给客户端之前,否则您最终会遇到异常。
    限制:
    您不能在上下文之外转发请求,因此请求应该在您的站点中。
    优点:
    在性能方面它会更快一些,因为第二次调用是在不知道容器的情况下进行的,并且不会有客户端到服务器的往返。

重定向

  1. 它发生在浏览器端,服务器向http浏览器发送状态代码 302,因此浏览器发出新请求。重定向需要从浏览器到服务器的多一次往返。
  2. 它是一个新请求,因此旧的参数和属性将不可用。
    优点:
    您也可以访问上下文之外的 servlet,因此您可以调用其他网站中的 servlet。
    限制:
    往返性能有点慢,而且
于 2013-02-13T11:21:43.850 回答
1

RequestDispacher 接口提供了将请求分派到另一个资源的功能,它可以是 html、servlet 或 jsp。这个接口也可以用来包含另一个资源的内容。它是servlet协作的方式之一。

在你的情况下,你得到这个

http://localhost:8080/Spinning/GestioneCalendario.jsp 

因为这个 servlet

 RequestDispatcher dispatcher = request
            .getRequestDispatcher("GestioneCalendario.jsp");
    dispatcher.forward(request, response);

页面刷新将始终将您重定向到您使用过的 servlet 的 url。就像调用 ajax 事件一样。

无论如何我可以看到你不需要使用转发方法,尝试使用

response.sendRedirect(your_url);
于 2013-02-13T11:22:40.120 回答