一、重定向:服务器通知浏览器,重新发送请求(浏览器地址要改变,两次请求两次相应)
绝对路径:response.sendRedirect("http://localhost:8080/datapub/1.html ");
相对路径:response.sendRedirect("1.html "); response.sendRedirect("../datapub/1.html ");
或者:response.setstatus("302"); response.serHeader("location","1.html");
二、转发:当前请求未完成,服务器调用另一个程序继续完成整个请求
服务器:当前程序需要获得请求调度器 RequestDispcher
forward(request,response)当调度器协调多个servlet时,此方法返回最后一个servlet页面输出的内容
三、重定向和转发的对比
(1)何时使用
重定向:可以指定当前项目的URL,也可以指定其它的web资源("/"代表的是端口的路径)-----从上面的图不难看出服务端做出了相应,所以是相对于浏览器的相对路径(http://localhsot:8080)而不是相对于(http://localhost:8080/webapp)
转发:只能指定当前项目的URL("/"代表的是项目的路径)-----转发始终在一次请求中完成所以它是相对于web项目的相对路径(http://localhost:8080/webapp)
(2)比较
转发:(一次请求一次相应)
1. 不会改变浏览器的地址栏
2. 共享一个请求(可以获得保存的数据)
3. 只能在同一个web应用中使用
重定向:(两次请求两次相应)
1. 浏览器中地址栏改变
2. 不共享请求(不可获得保存的数据)
3. 可以重定向到任意的URL