请求转发
请求转发实现了服务器内部的资源跳转。
只能在当前web应用或虚拟主机间跳转。
一次请求,一次响应。一个请求对象必然对应一个响应对象。
Web应用内部(服务器内部)的资源跳转,浏览器感受不到变化,地址栏不会发生变化。
request.getRequestDispatcher("/RequestDemo5").forward(request,response);
既然是服务器内部,那么path路径不需要写虚拟路径,直接写/资源名
即可。
在一次请求链中,转发的request是同一个,请求链上的servlet可以共享request中数据。
请求重定向
它也是一种资源跳转的方式,但是与转发不同的是,它可以在不同的服务器之间跳转。
可以在当前web应用或虚拟主机,也可以是其他间跳转。
两次请求,两次响应,产生两次请求对象,对应两个响应对象。
服务器之间的跳转方式,但浏览器会感应到,地址栏将会变化。
response.sendRedirect(request.getContextPath()+"/ResponseDemo3");
由于在不同服务器间资源跳转,需要加上必要的虚拟路径。
使用时机
如果希望地址栏发生变化,使用重定向,否则使用转发。
只能请求转发的情况:在同一个服务器中,且希望利用request域实现资源跳转,共享数据。
只能重定向的情况:跨服务器,跨不同应用的情况。