调用servlet后不同的url

时间:2013-02-13 11:04:55

标签: java servlets forwarding requestdispatcher

我有一个servlet,它做了一些事情,当它完成后,在请求中放入一些东西,然后调用另一个servlet,后者再调用一个jsp页面。 我写了代码:

第一个servlet(InserisciLezione)

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

第二个servlet(TakeDates)

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

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

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

如果我刷新页面,第一个servlet再次被调用,我不希望这样。 我想要

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

为什么呢? 提前谢谢!

3 个答案:

答案 0 :(得分:2)

如果我的记忆很好(我很长时间没有使用原始servlet),你应该使用重定向而不是前进。

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

干杯,

答案 1 :(得分:2)

您可以使用sendRedirect代替forward

转发

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

    1. 它发生在浏览器端,服务器向浏览器发送http状态代码302,因此浏览器发出新请求。重定向需要从浏览器到服务器再往返一次。
    2. 是一个新请求,因此旧的参数和属性将无法使用 的 优点:
      您也可以访问上下文中的servlet,这样您就可以调用另一个Web站点中的servlet。
      限制:
      有一个往返性能明智有点慢和

答案 2 :(得分:1)

RequestDispacher接口提供了将请求分派给另一个资源的工具,它可能是html,servlet或jsp。此接口也可用于包含antoher资源的内容。它是servlet协作的一种方式。

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

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

因为这个servlet

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

页面刷新将始终将您重定向到您使用的servlet的URL。它就像召唤ajax事件一样。

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

response.sendRedirect(your_url);