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