RequestDispatcher.forward() 和 HttpServletResponse.sendRedirect() 之间有什么区别?
的方法和 的方法有什么区别?
任何人都可以用一个例子来解释,并用一个实时的例子来解释这些方法的最佳用法?RequestDispatcher
forward()
HttpServletResponse
sendRedirect()
的方法和 的方法有什么区别?
任何人都可以用一个例子来解释,并用一个实时的例子来解释这些方法的最佳用法?RequestDispatcher
forward()
HttpServletResponse
sendRedirect()
重定向是一种发送回客户端的响应类型,而转发委派完全在服务器端进行,转发操作的结果返回到客户端,就好像它仅来自原始 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 ():
此方法在 HttpServletResponse Interface 中声明
签名:void sendRedirect(字符串 url)
此方法用于将客户端请求重定向到其他位置进行进一步处理,新位置在不同的服务器或不同的上下文中可用。我们的Web容器处理此请求并使用浏览器传输请求,并且此请求在浏览器中显示为新请求。有时,这也称为客户端重定向。
Forward():此方法在 RequestDispatcher Interface 中声明。
签名: 转发(ServletRequest request, ServletResponse response)
此方法用于将请求传递到另一个资源,以便在同一服务器内进行进一步处理,另一个资源可以是任何 servlet、jsp 页任何类型的文件。当我们调用转发方法请求发送到另一个资源而没有通知客户端时,此过程由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()。