目录
部分摘自 https://blog.csdn.net/u010452388/article/details/80398929
重定向和转发
重定向和转发都是跳转到另一个地方,从一个servlet跳转到另一个servlet或者从一个页面跳转到另一个页面
我们访问了这个TestServlet之后就会跳转到test.html页面
重定向还有一种写法,其实sendRedirect 就是封装了下面2个方法
//设置状态码
response.setStatus(302);
//设置头文件类型
response.setHeader("location", "test.html");
请求次数
重定向会请求2次,而转发只会请求一次
为什么会请求2次,我们不是只访问了一次嘛?
因为有一次是服务器向浏览器请求
看下图可知,右边是重定向,重定向执行完重定向的代码后,会发送一个请求给浏览器,这个请求叫302重定向
浏览器接受后,再发送请求给服务器,跳转到相应的页面
而左边的请求转发,直接在服务器的内部跳转到资源处
浏览器地址栏的区别
且重定向的第二次请求因为是浏览器发出的,所以浏览器的地址栏会发生变化
这是之前的地址
访问之后,地址栏发生变化
而对应的转发,同样能访问到内容,但是地址栏却不变化
跳转的范围
重定向可以跳转到任意地址,甚至可以跳到其他网站
而转发只能在本项目里跳转
request共享问题
首先我们要知道request的作用域范围是 "本次请求" ,下次请求后之前的request就没了,且执行完servlet后,request也没了
也就是说浏览器带着参数数据发送请求过来后
如果我们使用重定向跳转到另一个页面,那么浏览器等于再发送一次请求,而这次请求肯定是没有数据的
因为这是浏览器自动发的,浏览器肯定不知道我们需要什么参数
所以会数据丢失
而转发是程序内部的传递,并且会把request传递过去
异步请求和转发页面
在https://blog.csdn.net/yzj17025693/article/details/88420097 jQuery仿百度搜索下拉框 的案例中
我们发现异步请求的情况下,转发页面是不会跳转到对应页面的,而是会把对应页面的数据一起传递
给异步请求接收的地方