response.sendRedirect()和request.getRequestDispatcher()之间有什么区别.forward(request,response)

时间:2013-12-04 09:14:06

标签: java jsp request response forward

当我使用JAVA时,我的页面跳转有问题, 如果我使用:

response.sendRedirect("login.jsp")

然后我得到这个网址:http://localhost:8080/login.jsp

但如果我使用

request.getRequestDispathcer("login.jsp").forward(request, response)

然后我得到这个网址:http://localhost:8080/Shopping/login.jsp(“购物”是我模块的名称。)

有什么区别?

5 个答案:

答案 0 :(得分:74)

简单解释差异,

  response.sendRedirect("login.jsp");

不预先添加contextpath(指的是捆绑servlet的应用程序/模块)

但是,而

 request.getRequestDispathcer("login.jsp").forward(request, response);

将预先添加相应应用程序的contextpath

此外,重定向请求用于将资源重定向到不同的服务器或域。控制任务的传输由容器委托给浏览器。也就是说,重定向将标头发送回浏览器/客户端。此标头包含要由浏览器重定向的资源URL。然后浏览器向给定的URL发起新请求。

转发请求用于转发到进行呼叫的服务器中可用的资源。这种控制转移由容器内部完成,不涉及浏览器/客户端。

答案 1 :(得分:17)

前进

控制可以转发到进行呼叫的服务器内可用的资源。这种控制转移由容器内部完成,不涉及浏览器/客户端。这是forward和sendRedirect之间的主要区别。转发完成后,如果需要,原始请求和响应对象将与其他参数一起传输。

重定向

控制可以重定向到不同服务器或域的资源。控制任务的传输由容器委托给浏览器。也就是说,重定向将标头发送回浏览器/客户端。此标头包含要由浏览器重定向的资源URL。然后浏览器向给定的URL发起新请求。由于它是一个新请求,旧请求和响应对象将丢失。

例如,sendRedirect可以将控制权从http://google.com转移到http://anydomain.com,但转发无法执行此操作。

'session'在前进和重定向中都没有丢失。

要直观地了解forward和sendRedirect之间的区别,请查看浏览器的地址栏, 在转发中,您将看不到转发的地址(因为浏览器不参与) 在重定向中,您可以看到重定向的地址。

答案 2 :(得分:14)

Forward(ServletRequest请求,ServletResponse响应)和sendRedirect(String url)之间的区别仅仅是

前进():

  1. forward()方法在服务器端执行。
  2. 请求将转移到同一服务器内的其他资源。
  3. 它不依赖于客户端的请求协议,因为servlet容器提供了forward ()方法。
  4. 请求由目标资源共享。
  5. 此方法仅消耗一个电话。
  6. 可在服务器内使用。
  7. 我们看不到转发的消息,它是透明的。
  8. forward()方法比sendRedirect()方法快。
  9. RequestDispatcher界面中声明。
  10. <强>的sendRedirect():

    1. sendRedirect()方法在客户端执行。
    2. 请求将转移到其他资源到不同的服务器。
    3. sendRedirect()方法在HTTP下提供,因此只能与HTTP个客户使用。
    4. 为目标资源创建了新请求。
    5. 消耗了两个请求和响应调用。
    6. 可以在服务器内外使用。
    7. 我们可以看到重定向的地址,它不是透明的。
    8. sendRedirect()方法较慢,因为在创建新请求时,旧请求对象将丢失。
    9. HttpServletResponse声明。

答案 3 :(得分:5)

1.redirect将请求从服务器返回浏览器,然后从浏览器向服务器重新发送请求。

2.forward将请求发送到另一个servlet(servlet到servlet)。

答案 4 :(得分:2)

重定向和请求调度程序是将一个页面移动到另一个页面的两种不同方法。 如果我们使用重定向到新页面,实际上会从客户端本身向新页面发生新请求。 所以我们可以看到URL的变化。 由于重定向是一个新请求,因此旧请求值不可用。