Java 什么';What’RequestDispatcher.forward()和HttpServletResponse.sendRedirect()之间的区别是什么?

Java 什么';What’RequestDispatcher.forward()和HttpServletResponse.sendRedirect()之间的区别是什么?,java,servlets,redirect,forward,Java,Servlets,Redirect,Forward,RequestDispatcher的forward()和HttpServletResponse的sendRedirect()方法之间有什么区别? 有人能用一个实例来解释这些方法的最佳用法吗?重定向是发送回客户端的一种响应类型,而转发委派完全在服务器端进行,转发操作的结果返回给客户端,就好像它只来自原始URL一样 另一个区别是,前向委托只能用于应用程序内的资源,而重定向只能用于应用程序内的资源 命令可以将客户端浏览器重定向到当前域之外 示例: 另一个很好的解释可以在这里找到: 一个请求只会转

RequestDispatcher
forward()
HttpServletResponse
sendRedirect()
方法之间有什么区别?

有人能用一个实例来解释这些方法的最佳用法吗?

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

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

示例:



另一个很好的解释可以在这里找到:

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

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

调用方和被调用方对象之间的请求-响应共享相同的请求和响应对象,重定向调用方和被调用方属于两个独立的访问请求和响应进程


必须在跳转重定向返回后添加,否则跳转通过页面,但也会在语句后面执行跳转,转发是在跳转页面后执行的,以下代码将不会执行。

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

签名:void sendRedirect(字符串url)

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

向前(): 此方法在RequestDispatcher接口中声明

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

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

ARequestDispatcher forward()用于将同一请求转发到另一个资源,而ServletResponse sendRedirect()是一个两步过程。在sendRedirect()中,web应用程序向客户端返回响应,状态代码为302(重定向),URL为发送请求的URL。发送的请求是一个全新的请求

Bforward()由容器内部处理,而sednRedirect()由浏览器处理

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

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

Eforward()不能用于在其他上下文中调用servlet,在这种情况下,我们只能使用sendRedirect()


只有当请求转发到的另一个servlet位于同一应用程序中时,我们才能使用请求调度器。另一方面,如果两个servlet驻留在同一个应用程序或不同的应用程序中,则在这两种情况下都可以使用发送重定向

注意:您可以执行
response.sendRedirect(“http://www.google.com");但不是
HttpRequest.getRequestDispatcher(“http://www.google.com");除非google.com驻留在您的服务器上。结论:
forward()
方法在服务器端工作,而
sendRedirect()
方法在客户端工作。
// 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);