forward和redirect是servlet的主要两种跳转方式,其中forward又叫转发,redirect又叫重定向。forward和redirect在请求方、浏览器地址表现以、参数传递以及底层运作等方面有区别。
一、forward和redirect的概念
forward与redirect是servlet的两种主要的跳转方式。forward又叫转发,redirect叫做重定向。
转发过程:客户浏览器发送http请求——>web服务器接受此请求—>调用内部的一个方法在容器内部完成请求处理和转发动作一>将目标资源发送给客户端;
在这里,转发的路径必须是同一个web容器下的URL,其不能转向到其他的web路径上去,中间传递的 是自己的容器内的request。在客户浏览器路径栏显示的仍然是其名列前茅次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。
重定向过程:客户浏览器发送http请求一一>web服务器接受后发送302状态码响及对应新的location给客户浏览器——>客户端浏览器发现是302状态码,会自动再发送一个新的http请求,请求url是新的location地址一一>服务器根据此请求寻找资源并发送给客户端浏览器。
在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器地址栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。
二、forward和redirect区别
1. 从地址栏显示来说
forward是服务器内部的重定向,服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器。浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址。
redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址。所以地址栏显示的是新的URL。
所以redirect等于客户端向服务器端发出两次request,同时也接受两次response;而forword只有一次请求。
2. 从数据共享来说
forward:forward方法只能在同一个Web应用程序内的资源之间转发请求,是服务器内部的一种操作。由于在整个定向的过程中用的是同一个request,因此forward会将request的信息带到被重定向的jsp或者servlet中使用,所以可以共享数据。
redirect:redirect是服务器通知客户端,让客户端重新发起请求。redirect不仅可以重定向到当前应用程序的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。所以不能共享数据。
3. 从应用场景来说
forward:一般适用于用户登陆的时候,根据角色转发到相应的模块。
redirect:一般适用于用户注销登陆时返回主页面和跳转到其它的网站等.
4. 从效率来说
forward:效率高。
redirect:效率低.
5. 从本质来说
forword转发是服务器上的行为,而redirect重定向是客户端的行为。
以上就是关于forward和redirect的知识希望对大家有帮助。