当我想要更改为其他网页时,我可以找到$this->dispatcher->forward()
和$this->response->redirect()
。两者似乎都运作正常。
它们之间有什么区别,我何时应该使用另一个?
答案 0 :(得分:7)
从广义上讲,Redirect
将执行http重定向(带有标头位置)。这意味着客户端的浏览器将更改页面。它处理到新的路由(它也可以用于转到另一个网站),实际的脚本将结束。
尽管Forward
是内部的,但客户端的浏览器不会看到任何差异,您只需执行不同的控制器。调度循环允许用户将执行流转发到另一个控制器/操作。这对于检查用户是否可以访问某些选项,将用户重定向到其他屏幕或仅重用代码非常有用。但是,请记住,制作“转发”与进行HTTP重定向不同。虽然他们显然得到了相同的结果。 “forward”不会重新加载当前页面,所有重定向都发生在单个请求中,而HTTP重定向需要两个请求来完成该过程。
类似的类比也可以在JSP中显示,
sendRedirect(String path)
的{{1}}方法将告诉客户端它应该向指定路径发送请求。因此,客户端将构建一个新请求并将其提交给服务器。客户端的历史记录将会更新,因此前进和后退按钮将起作用。此方法对于重定向到其他服务器和域上的页面非常有用。
HttpServletResponse
的转发方法会将RequestDispatcher
和ServletRequest
转发给ServletResponse
中指定的路径。回复不会被发回客户端,因此客户端将不知道服务器上的此资源更改。此方法对于服务器资源(servlet到servlet)之间的通信非常有用。此方法比使用getRequestDispatcher(String path).
更快,因为没有网络往返服务器并且需要返回。