本质区别:
重定向:web 组件可以将请求重定向到任意一个 url,而不仅仅是同一个应用。
重定向的源组件与目标组件不共用同一个 HttpServletRequest 对象,因此不能在 request 范围内共享数据。
请求转发:转发的源组件与目标组件必须在同一个应用中,两者可以在 request 范围内共享数据。
假设你去办理某个执照
重定向:你先去了 A 局,A 局的人说:“这个事情不归我们管,去 B 局”,然后,你就从 A 退了出来,自己乘车去了 B 局。
请求转发:你先去了 A 局,A 局看了以后,知道这个事情其实应该 B 局来管,但是他没有把你退回来,而是让你坐一会儿,自己到后面办公室联系了 B 的人,让他们办好后,送了过来。
工作流程:
1.重定向
浏览器发出 http 请求 >> 服务器接受请求并发送 302 状态码和新的对应的 url 到浏览器 >>
浏览器接收响应并自动请求新的 url >> 服务器接收请求并寻找客户所需的资源响应到浏览器
2.转发
浏览器发出 http 求其 >> 服务器接收请求 >> 服务器调用内部的一个方法在容器内完成请求处理和转发动作 >>
将客户所需资源发送到浏览
调用方式:
我们知道,在 servlet 中调用转发、重定向的语句如下:
request.getRequestDispatcher(“new.jsp”).forward(request, response); //转发到 new.jsp
response.sendRedirect(“new.jsp”); //重定向到 new.jsp
在 jsp 页面中你也会看到通过下面的方式实现转发:
<jsp:forward page=”apage.jsp” />
当然也可以在 jsp 页面中实现重定向:
<%response.sendRedirect(“new.jsp”); %> //重定向到 new.jsp