转发与重定向的区别和应用

转发(Forword)

转发:客户端浏览器发送http请求,web服务器接收此请求,调用内部的方法在容器的内部进行处理,将目标资源发送给客户端浏览器。这里的转发路径必须是同一个web容器下的url,不能访问到其他的路径上去。转发行为浏览器只做了一次访问请求。

request.getRequestDispatcher(“login.jsp”).forward(request,response);

重定向(Redirect)

重定向:是利用服务器返回的状态码来实现的。客户端浏览器向服务器发送一个http请求,服务器会返回一个302状态码。浏览器发现是302状态码之后,再发送一个新的http请求,服务器再根据此请求寻找资源并发送给客户。这里的请求可以是任意的URL。重定向行为是浏览器至少做了两次访问请求的。这两次请求互不干扰,相互独立。

response.sendRedirect(“login.jsp”);

1. 地址栏显示不同

转发是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器。浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址。
重定向是服务端发送一个状态码,告诉浏览器重新去请求那个地址,所以地址栏显示的是新的URL。

2. 从数据共享来说

转发:转发页面和转发到的页面可以共享request里面的数据.
重定向:不能共享request里面的数据.

3. 从效率来说

转发:高
重定向:低

发表评论

电子邮件地址不会被公开。 必填项已用*标注