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