重定向和请求转发的区别(这应该算是复习吧...)

重定向和请求转发的区别(这应该算是复习吧...)

从上古时期学完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);

  1. 地址上显示的是请求servlet的地址

  2. 请求次数只有一次, 因为是服务器内部帮客户端执行了后续的工作。

    可以理解是服务器端行为,客户端发起一次请求,这个请求在整个服务器端可以被多次传递,但都是由服务器端的处理程序传递给另一个处理程序客户端不需要发起二次请求无论这个请求经历过多少个处理程序,始终都是同一个请求,也就意味着,这个请求中的数据经历过的每一个处理程序都可以使用

    中间传递的是自己容器的request,客户端的路径栏显示的还是第一次访问的路径客户端是感觉不到服务器做了转发的请求转发客户端是只做了一次请求

  3. 只能跳转自己项目的资源路径 。

  4. 效率上稍微高一点,因为只执行一次请求。

  5. 可以使用上一次的request对象。

简单的图例

image-20210105160924709

重定向

//重定向写法: 重新定位方向 参数即跳转的位置

response.sendRedirect("login_success.html");

  1. 地址上显示的是最后的那个资源的路径地址

  2. 请求次数最少有两次服务器在第一次请求后,会返回一个地址, 浏览器在根据这个地址执行第二次访问

    可以理解为是客户端行为,客户端发起一次请求服务器端给出一次响应,但这个响应包含下一次客户端需要访问的服务器端处理程序的地址客户端再次发起请求,将会得到处理结果,也就意味着重定向客户端至少发起两次请求

使用了重定向跳转页面后,在其客户端路径栏显示的应该是其重定向的路径,客户端是可以观察到页面地址变化的,重定向是客户端至少做了两次访问请求的

  1. 可以跳转到任意路径

  2. 效率稍微低一点, 执行两次请求。

  3. 后续的请求,没法使用上一次的****request 存储的数据或者 没法使用上一次的request对象,因为这是两次不同的请求

6.重定向可以跨域访问,而转发是在web服务器内部进行的,不能跨域访问

简单的图例

image-20210105161002914

学习web时期的图

image-20210105161026743

区别是什么?

请求转发只请求了一次

例子 你去小卖部买黄鹤楼,老板説现在没有了 但是,你等会,我去仓库里面帮你拿货。老板从仓库出来把黄鹤楼给你。

重定向请求了两次

例子 你去小卖部买黄鹤楼,老板説现在没有了 隔壁超市里面有,你去隔壁买吧,于是 你去了隔壁超市,买到了黄鹤楼。

缺点

请求转发会等待,浪费时间

重定向会请求两次,可能会浪费资源,第一次请求的存储的数据或request对象就没有了

有什么用?

只知道是两种请求的方式 0.0

  1. 前后两个页面有数据传递时,例如查询了数据需要在页面显示时,用请求转发。

  2. 没有数据传递,例如做了更新操作跳转到其他页面,就用重定向

posted @ 2021-01-12 09:09  cnng  阅读(207)  评论(0编辑  收藏  举报