在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%>
二、差异
1.要求转发是做事器行为,重定向是客户端行为。下面看两个动作的事情流程:
转发过程:客户浏览器发送http要求 → web做事器接管此要求 → 调用内部的个方法在容器内部完成要求处理和转发动作 → 将目标资源发送给客户;在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间通报的是自己的容器内的request。在客户浏览器路径栏显示的仍旧是其第一次访问的路径,也便是说客户是觉得不到做事器做了转发的,转发行为是浏览器只做了一次访问要求。
重定向过程:客户浏览器发送http要求 → web做事器接管后发送302状态码相应及对应新的location给客户浏览器→客户浏览器创造是302相应,则自动再发送一个新的http要求,要求url是新的location地址→做事器根据此要求探求资源并发送给客户。在这里location可以重定向到任意URL,既然是浏览看重新发出了要求,则就没有什么request通报的观点了。在客户浏览器路径栏显示的是其重定向的路径,客户可以不雅观察到地址的变革的,重定向行为是浏览器做了至少两次的访问要求的。
2.重定向,实在是两次request, 第一次,客户端request A,做事器相应,并response回来,见告浏览器,你该当去B。这个时候浏览器看到地址变了,而且历史的回退按钮也亮了。重定向可以访问自己web运用以外的资源。在重定向的过程中,传输的信息会被丢失。
要求转发是做事器内部把对一个request/response的处理权,移交给其余一个 对付客户端而言,它只知道自己最早要求的那个A,而不知道中间的B,乃至C、D。 传输的信息不会丢失。
普通的例子:
假设你去办理某个执照,
重定向:你先去了A局,A局的人说:“这个事情不归我们管,去B局”,然后,你就从A退了出来,自己乘车去了B局。
转发:你先去了A局,A局看了往后,知道这个事情实在该当B局来管,但是他没有把你退回来,而是让你坐一下子,自己到后面办公室联系了B局的人,让他们办好后,送了过来。