一、重定向与转发的区别
重定向: 转发:
访问服务器两次 只访问服务器一次
浏览器 url 发生变化 只能看见第一次访问的页面 url,以后的操作有服务器完成
跳转后必须要加上 return,否则页面 只执行跳转页面,后面代码不会再执行
虽然跳转了,可是还会执行跳转之后的语句
可访问自己 web 应用以外的资源
# 在 request 级别使用信息共享,使用重定向必然出错
二、调用方式
request.getRequestDispatcher("new.jsp").forward(request, response);
response.sendRedirect("new.jsp");
<jsp:forward page="apage.jsp" />
<%response.sendRedirect("new.jsp");//重定向到new.jsp%>
三、本质区别
客户端浏览器发送 http 请求,web服务器接收请求,调用内部的一个方法在容器内部完成请求处理和转发动作,将目标资源发送给客户。
转发的路径必须是同一个 web 容器下的 url,不能转向到其他的 web 路径上去,中间传递的是自己容器内部的 request。
在客户端浏览器显示的仍然是第一次访问的路径,即客户端是感觉不到服务器是做了转发的。
客户端浏览器发送 http 请求,web服务器接收后发送
给客户端浏览器,客户端发现是302响应,则自动再发送一个新的 http 请求,请求 url 实心的location 地址,服务器根据次请求寻找资源并发送给客户端。
在这里 location 可以重定向到任意 url,所以并没有 request 传递的概念了。
在客户端浏览器路径栏显示的是其重定向的路径。
重定向行为浏览器至少做了两次访问请求。