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

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

response.sendRedirect("login.jsp") 

那么我得到这个url: http://localhost:8080/login.jsp

但是,如果我使用

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

那么我得到这个url: http://localhost:8080/Shopping/login.jsp (“购物”是我的模块的名称)。

有什么不同?

为了简单地解释差异,

  response.sendRedirect("login.jsp"); 

不会预先join上下文path(指的是servlet捆绑在其中的应用程序/模块)

但是,而

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

将预先加载相应应用程序的上下文path

而且, redirect请求用于将资源redirect到不同的服务器或域。 这个控制任务的转移由容器委托给浏览器。 也就是说,redirect将一个头返回给浏览器/客户端。 这个头包含了浏览器redirect的资源url。 然后浏览器发起一个新的请求到给定的url。

转发请求用于转发呼叫所在服务器内可用的资源。 控制权的转移由容器在内部完成,不涉及浏览器/客户端。

前锋

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

redirect

控制可以redirect到不同的服务器或域的资源。 这个控制任务的转移由容器委托给浏览器。 也就是说,redirect将一个头返回给浏览器/客户端。 这个头包含了浏览器redirect的资源url。 然后浏览器发起一个新的请求到给定的url。 由于这是一个新的请求,旧的请求和响应对象将丢失。

例如,sendRedirect可以将控制从http://google.com转移到http://anydomain.com,但转发不能这样做。;

“会话”在向前和redirect中都不会丢失。

为了直接感受forward和sendRedirect之间的区别,可以看到浏览器的地址栏,在转发中,您将看不到转发的地址(因为浏览器没有涉及),您可以看到redirect的地址。

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

前锋():

  1. forward()方法在服务器端执行。
  2. 该请求被转移到同一服务器内的其他资源。
  3. 它不依赖于客户端的请求协议,因为forward ()方法是由servlet容器提供的。
  4. 该请求由目标资源共享。
  5. 这个方法只消耗一个调用。
  6. 它可以在服务器内使用。
  7. 我们看不到转发的消息,它是透明的。
  8. forward()方法比sendRedirect()方法快。
  9. 它在RequestDispatcher接口中声明。

的sendRedirect():

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

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

2.向前发送请求到另一个servlet(servlet到servlet)。

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

redirect:将请求从服务器返回到浏览器/客户端,然后从浏览器/客户端重新发送请求到服务器。

转发:将请求发送到另一个servlet(servlet到servlet),而不是将请求发送到另一个浏览器/客户端。