sendRedirect或请求Dispatch更高效?

SendRedirect或requestdispatch?哪个更优选?哪个更有效?

他们做了两件截然不同的事情,所以你不能只决定效率。

发送重定向会将浏览器发送到其他URL。 该URL将对浏览器可见。 你可能想要也可能不想要那样。 例如,在POST之后,您可能应该重定向到GET页面,以避免在没有重新发布的情况下无法重新加载结果页面。 另一方面,您无法重定向到只能从servlet容器内部访问的“页面”。

调度更加“有效”,因为没有额外的往返,但它只适用于相同的Web应用程序上下文(或者如果您设置它,最多在同一个servlet容器中)。 此外,用户首先用于访问页面的URL将与稍后在链中调用的servlet不同,这可能会造成混淆。 调度模式通常用于在实际请求之前或之后(代替ServletFilter)或错误页面进行额外处理。

您可以使用调度传递请求属性,但只能在重定向上查询参数。 您无法重定向为POST(因此您可以附加到它的数据量有限)。 重定向中的所有查询参数对用户可见。

它的转发效率很高,因为它比sendRedirect更快,如果我们需要将控制转移到不同的域,则应该使用重定向。

当我们调用转发请求时,请求被发送到服务器上的另一个资源,而不会通知客户端不同的资源将处理该请求。 此过程完全在Web容器中进行。 另一方面,当调用sendRedirect方法时,它会使Web容器返回到浏览器,指示应该请求新的URL。 因为浏览器发出一个全新的请求,所以在重定向发生之前存储为请求属性的任何对象都将丢失。 这次额外的往返使得重定向比前进更慢。