重定向和请求转发的区别(这应该算是复习吧...)
重定向和请求转发的区别(这应该算是复习吧...)
从上古时期学完javaWeb开始 请求转发和重定向就一直记不太清楚了,感觉模糊(0.0) 不知道request/response那个发的是请求转发那个发的是重定向
现在告诉你 就是这样 记住了吗? 记住了就滚吧
-
请求转发 request.getRequestDispatcher("index.jpg").forward(request,response);
-
重定向 response.sendRedirect("index.jpg");
理解了单词是什么意思 也更好理解或记忆了
- Redirect 重新导向 重定向 是用response发的
- request是请求 就记请求转发是用request的 request.getRequestDispatcher("index.jpg").forward(request,response);
顺便再记两个单词吧
dispatcher 收发 调度
distribute 分发 分配
感觉大致是记住了 请求转发和重定向
什么是请求转发 什么是重定向
请求转发
//请求转发的写法: 参数即跳转的位置
request.getRequestDispatcher("login_success.html").forward(request, response);
-
地址上显示的是请求servlet的地址。
-
请求次数只有一次, 因为是服务器内部帮客户端执行了后续的工作。
可以理解是服务器端行为,客户端发起一次请求,这个请求在整个服务器端可以被多次传递,但都是由服务器端的处理程序传递给另一个处理程序,客户端不需要发起二次请求,无论这个请求经历过多少个处理程序,始终都是同一个请求,也就意味着,这个请求中的数据经历过的每一个处理程序都可以使用
中间传递的是自己容器的request,客户端的路径栏显示的还是第一次访问的路径,客户端是感觉不到服务器做了转发的,请求转发客户端是只做了一次请求。
-
只能跳转自己项目的资源路径 。
-
效率上稍微高一点,因为只执行一次请求。
-
可以使用上一次的request对象。
简单的图例
重定向
//重定向写法: 重新定位方向 参数即跳转的位置
response.sendRedirect("login_success.html");
-
地址上显示的是最后的那个资源的路径地址
-
请求次数最少有两次, 服务器在第一次请求后,会返回一个地址, 浏览器在根据这个地址,执行第二次访问。
可以理解为是客户端行为,客户端发起一次请求,服务器端给出一次响应,但这个响应包含下一次客户端需要访问的服务器端处理程序的地址,客户端再次发起请求,将会得到处理结果,也就意味着重定向客户端至少发起两次请求
使用了重定向跳转页面后,在其客户端路径栏显示的应该是其重定向的路径,客户端是可以观察到页面地址变化的,重定向是客户端至少做了两次访问请求的
-
可以跳转到任意路径。
-
效率稍微低一点, 执行两次请求。
-
后续的请求,没法使用上一次的****request 存储的数据,或者 没法使用上一次的request对象,因为这是两次不同的请求。
6.重定向可以跨域访问,而转发是在web服务器内部进行的,不能跨域访问
简单的图例
学习web时期的图
区别是什么?
请求转发只请求了一次
例子 你去小卖部买黄鹤楼,老板説现在没有了 但是,你等会,我去仓库里面帮你拿货。老板从仓库出来把黄鹤楼给你。
重定向请求了两次
例子 你去小卖部买黄鹤楼,老板説现在没有了 隔壁超市里面有,你去隔壁买吧,于是 你去了隔壁超市,买到了黄鹤楼。
缺点 :
请求转发会等待,浪费时间
重定向会请求两次,可能会浪费资源,第一次请求的存储的数据或request对象就没有了。
有什么用?
只知道是两种请求的方式 0.0
-
当前后两个页面有数据传递时,例如查询了数据需要在页面显示时,用请求转发。
-
当没有数据传递,例如做了更新操作跳转到其他页面,就用重定向。