RequestDispatcher.forward()和HttpServletResponse.sendRedirect()之间有什么区别?

RequestDispatcherforward()HttpServletResponsesendRedirect()方法有什么区别?
任何人都可以用实时例子解释这些方法的示例和最佳用法吗?

重定向是一种发送回客户端的响应,而前向委派完全在服务器端进行,而前向操作的结果返回给客户端,就好像它只来自原始URL一样。

另一个区别是前向委派只能用于应用程序内资源,而重定向命令可以将客户端浏览器重定向到当前域之外。

例子:

 // Sends a temporary redirect to the HTTP client. Only absolute URLs are allowed. ServletResponse.sendRedirect(String location); 

 // Delegates one HttpRequest to another dynamic or static resource HttpRequest.getRequestDispatcher("example.jsp").forward(request, response); 

 // Includes/enriches current response with another dynamic or static resource HttpRequest.getRequestDispatcher("example.html").include(request, response); 

可以在这里找到另一个很好的解释:
sendRedirect()和forward()之间的区别

SendRedirect ():
此方法在HttpServletResponse接口中声明

签名:void sendRedirect(String url)

此方法用于将客户端请求重定向到其他位置以进行进一步处理,新位置可在不同服务器或不同上下文中使用。我们的Web容器处理此并使用浏览器传输请求,此请求在浏览器中可见为新请求。 有时这也被称为客户端重定向。

Forward ():此方法在RequestDispatcher接口中声明。

签名:转发(ServletRequest请求,ServletResponse响应)

此方法用于将请求传递给另一个资源以便在同一服务器内进一步处理,另一个资源可以是任何servlet,jsp页面任何类型的文件。当我们调用forward方法请求发送到web容器时,这个过程由web容器处理。没有通知客户端的另一个资源,哪个资源将处理requestDispatcher对象上提到的请求,我们可以通过两种方式使用ServletContext或Request来获取该请求。 这也称为服务器端重定向。

RequestDispatcher forward()用于将相同的请求转发到另一个资源,而ServletResponse sendRedirect()用于两个步骤。 在sendRedirect()中,Web应用程序将响应返回给客户端,其状态代码为302(重定向),并带有URL以发送请求。 发送的请求是一个全新的请求。

B forward()由容器内部处理,而sednRedirect()由浏览器处理。

C我们应该在访问同一个应用程序中的资源时使用forward(),因为它比需要额外网络调用的sendRedirect()方法更快。

D在forward()浏览器中不知道实际的处理资源,地址栏中的URL保持不变,而在sendRedirect()地址栏中的URL更改为转发的资源。

E forward()不能用于在另一个上下文中调用servlet,在这种情况下我们只能使用sendRedirect()。

细节说明这里

转发请求仅将请求转发到相同的WEB应用程序组件,并且重定向也可以重定向到不同应用程序资源中的同一站点,甚至可以定向到绝对URL。

重定向可以看到目标页面的URL,页面URL转发只能看到第一次访问,毕竟还有一个服务器要做的工作。

调用者和被调用者对象之间的请求响应共享相同的请求和响应对象,重定向调用者和被调用者属于两个单独的访问请求和响应过程。

必须在跳转重定向返回后添加,否则跳过页面,还会执行跳转语句,转发执行跳转页面,以下代码不会被执行。

只有当转发请求的其他servlet位于同一个应用程序中时,我们才能使用请求调度程序。 另一方面,如果两个servlet位于同一个应用程序或不同的应用程序中,则可以在两种情况下使用Send Redirect。